2013-07-25 5 views
-6

여기서 우리는 sizeof 연산자를 C에 있습니다.sizeof 연산자 뒤의 논리

printf("%d",sizeof(some datatype)); 

결과가 4 (OS에 따라 다름) 인 데이터 유형의 크기가 반환됩니다.

계산 방법을 알고 싶습니다. 그 운영자 뒤에있는 논리는 무엇입니까? sizeof 연산자에 대한 코드를 작성하도록 요청하는 경우. 당신의 대답은 무엇입니까?

참고 : 크기를 계산할 수 있도록 코드로 작성된 sizeof을 알고 싶습니다.

정확하게 질문 할 수 없기 때문에 여기에서 다시 시도하고 있습니다.

Write one function which we can use instead of sizeof operator.

+1

이것은 중복되지 않습니다 ... sizeof를 코드로 작성하여 크기를 계산할 수있는 방법을 알고 싶습니다. – someone

+0

거기에 일반적인 질문을 할 수있는 사람이 있습니까 ??? 예를 들어 int를 썼습니다 ... – someone

+1

어떤 코드입니까? 'sizeof'는 함수가 아니라 연산자입니다. –

답변

5

컴파일러는 모든 종류의 크기를 알고 그것으로이 있거나 올바르게 코드를 생성 할 수 없습니다. 이 정보는 sizeof 운영자가 사용합니다.

또한 sizeof은 런타임에 호출되는 일부 함수가 아니며 컴파일하는 동안 완전히 평가되는 연산자입니다.

+0

당신이 당신의 이름으로 sizeof 연산자를 하나 더 개발하도록 요청하면 코드를 작성할 수 있습니까? 이것이 제 질문을 자세히 설명하기를 바랍니다. – someone

+0

'sizeof ("Hello")'를 쓰면 컴파일러는 그냥 정수 '6'- 5 글자와 널 문자로 바꿉니다. 요아킴은 방금 컴파일 타임 연산자를 작성 했으므로 런타임에 마술처럼 계산되어 아무 것도 알아 내지 못합니다. –

+2

@Krishna 나는 요아킴이 :-) 할 수 있다고 확신합니다. - 본질적으로, 그것은'return 16'과 같은 결과를 낳을 것입니다. 이것은 컴파일러가하는 것입니다. 형식을 찾고 컴파일러는 각 형식의 길이를 알고 있기 때문에 상수로 바꿀 수 있습니다 –

1

컴파일 시간에 sizeof(int)은 플랫폼에 특정한 상수로 바뀝니다. sizeof 연산자는 C 컴파일러에서 완전히 구현됩니다. 함수 호출이 아니며 런타임에 작동하지 않습니다.

컴파일러에서 sizeof에 대한 코드는 매우 간단합니다. 예를 들어, 32 비트 머신 int에는 4 바이트가 있고, char에는 1 바이트 등이있는 하드 코딩 된 값이 있습니다. 따라서 문자열 sizeof(int)을 간단히 찾아보고 대체하면 4으로 바뀝니다.

덧붙여 단항 식에는 괄호가 필요하지 않으므로 int t[10]을 입력하면 sizeof t을 쓸 수 있습니다. 그러나 유형 이름 표현식의 경우이 이름이 필요합니다 (예 : sizeof(int)). 그냥 재미있는 일이야. 컴파일 시간 sizeof(int)에서

+0

그건 맞지 않아. 'int sizeof int'는 잘못되었습니다. 왜냐하면'int'는 단항식이 아닌 형식 이름입니다. 'sizeof' 표현식의 인자로 사용할 수있는 것은 (1) 단항 식, (2) 타입 이름 _in 괄호 ._입니다. 그래서 만약 당신이'int * foo [30]'을 쓰면'sizeof foo'라고 쓸 수 있습니다. 그러나 여전히'sizeof (int)'를 맞춰야합니다. –

+0

@ElchononEdelson Ops, 나는 실수를했다, 고마워, 나는 나의 지위를 편집했다. –

0

는 당신은 문자열

또는 MACRO

에 대한 기능의 자신의 크기를 쓸 수

운영 체제 (16 비트, 32 비트, 64 비트)에 의존 적절한 크기로 대체

#define SIZEOF(x) ((char*)(&(x) + 1) - (char*)&(x)) 
1

wikipedia에서 인용 :

모스에서 sizeof는 컴파일 타임 연산자입니다. 즉, 컴파일시 sizeof 식 이 상수 결과 값으로 바뀌는 것을 의미합니다.