2011-09-07 5 views
10

은 다른 컴파일러 (gcc, visual c 및 기타)에서 열거 형의 크기가 항상 동일합니다. 즉, 특정 enum의 sizeof()가 C/C++ 표준을 따르는 모든 컴파일러에서 동일한 값을 제공합니까?다른 컴파일러의 열거 형 크기 (바이트 단위)

+0

서명 여부가 다를 수 있습니다. –

답변

14

C 및 C 모두 제

++ 열거은 모든 값을 나타낼 수있는 크기는 갖고 정수 타입과 호환 될 것이다. 다른 컴파일러는 다른 알고리즘을 사용하여 유형을 선택할 수 있습니다 (ABI와 같은 다른 표준에 의해 지정되지 않은 경우).

+0

반드시 그렇지는 않습니다 : C는 C++에서와 마찬가지로 컴파일러에서 열거 형 값 유형을 선택할 수 있도록합니다. [the C 표준] (http://www.open-std.org/JTC1/sc22/wg14/www/docs/n1256.pdf) 섹션 6.7.2.2/4를 참조하십시오. – pmg

+0

또한 C++ 0x에서 새 * enum 클래스 *를 사용하여 열거 형 값을 백업하는 데 사용할 정수 유형을 지정할 수 있습니다. –

+0

@pmg, 감사합니다. 내가 어디 있는지 알 수 없다. 나는 그것이 C90의 경우 이미 확인했다. – AProgrammer

2

"각 열거 형은 문자와 호환되어야한다, 서명 정수 유형 또는 부호없는 정수 타입 (C++ (11)는 새로운 구문을 사용하여 기본 유형을 지정할 수 있습니다). 유형의 선택은 입니다 구현 정의)하지만 열거 형의 모든 구성원에 대해 값을 나타낼 수 있어야합니다. "

"구현시 모든 열거 형 상수가 표시 될 때까지 어떤 정수 유형 의 선택을 지연시킬 수 있습니다."

ISO/IEC 9899 : 그래서 우리는 단지를 sizeof (열거)에 대한 상위 경계를

1999 (E) P.105. 대부분의 시스템에서 sizeof (enum) = 4 였지만 STM 컴파일러는 열거 형으로 작성된 값에 따라 sizeof (enum) = 1/2/4을 만들었습니다

편집 : 열거 형 값 중 하나를 다음과 같이 설정할 수 있습니다. 컴파일러가 정수를 enum 크기로 선택하도록하려면 int.