2013-10-11 3 views
4

왜 다음 프로그램의 출력이 4입니까?sizeof ('3') == 4가 GCC 컴파일러를 사용하는 이유는 무엇입니까?

#include <stdio.h> 

int main() 
{ 
    printf("%d\n", sizeof('3')); 
    return 0; 
} 
+0

''x ''리터럴은''char''가 아니기 때문에''int's입니다. – cyphar

+0

이것은 도움이 될 수 있습니다 : [C/C++에서 문자 ('a')의 크기] (http://stackoverflow.com/questions/2172943/size-of-character-a-in-cc) – Jost

+0

@Shanpriya : 너는이 질문을하는거야? 이 프로그램이 무엇을 기대하고 있었으며 그 이유는 무엇입니까? – AnT

답변

10

문자 상수의 유형은 int하지 char (그리고 플랫폼에 int의 크기가 4 개이고) 때문입니다.

C99 드래프트 사양은 말한다 :

정수 문자 상수는 int 형이있다.

이 이상하게 보일 수도 있지만,이 작업을 수행 할 수 있다는 것을 기억

const uint32_t png_IHDR = 'IHDR'; 

즉, 하나의 문자 상수 (위, 4 개) 이상의 실제 문자로 구성 될 수 있습니다. 즉, 결과로 값이 일 때 char이 될 수 없으므로 즉시 오버플로되고 무의미합니다.

참고 : 위의 내용은 매우 이 아닙니다. 의미있는 것으로 보이는 것은 다른 토론입니다. :)

5

문자 리터럴은 int입니다.

'3'과 같은 문자 상수는 int입니다.

sizeof(character_constant)==sizeof(int)==> In your case sizeof(int)==4

어디에서 C++가 char

이기 때문에이 차이는 C와 C++ 모두로 컴파일되는 일부 코드에 일치하지 않는 동작이 발생할 수 있습니다.

memset(&i, 'a', sizeof('a')); // Questionable code 
+1

상수의 값은 그 타입을 결정하지 않습니다. ''3 ''은''char'' 타입의 상수''51'' 일 수 있었지만, 그렇지 않았습니다. –

+0

실제로 그에 따라 수정되었습니다. 감사. – Gangadhar