C의 기본 열거 형 값은 모든 컴파일러에서 동일합니까?
아래 그림과 같이 열거를 선언 할 때, 모든 C 컴파일러는 기본 값을 설정하는 x=0
, y=1
그리고 z=2
모두 리눅스와 윈도우 시스템을?
typedef enum {
x,
y,
z
} someName;
예. 열거 정의에서 달리 지정하지 않는 한 초기 열거 자의 값은 항상 0이고 각 후속 열거 자의 값은 이전 열거 자보다 1이 큽니다.
C99 표준
N1265 C99 초안 6.7.2.2/3 "열거 지정자"에서 말한다
=가있는 열거자는 해당 열거 상수를 상수 식의 값으로 정의합니다. 첫 번째 열거 자에 no
=
가있는 경우 열거 상수 값은 0입니다. =가없는 각 후속 열거자는 이전 열거 상수 값에 1을 더하여 얻은 상수 식의 값으로 열거 상수를 정의합니다. (=과 함께 열거자를 사용하면 동일한 열거에서 다른 값을 복제하는 값이있는 열거 상수가 생성 될 수 있습니다.)
따라서 다음은 항상 준수 구현을 유지합니다.
main.c
#include <assert.h>
#include <limits.h>
enum E {
E0,
E1,
E2 = 3,
E3 = 3,
E4,
E5 = INT_MAX,
#if 0
/* error: overflow in enumeration values */
E6,
#endif
};
int main(void) {
/* If unspecified, the first is 0. */
assert(E0 == 0);
assert(E1 == 1);
/* Repeated number, no problem. */
assert(E2 == 3);
assert(E3 == 3);
/* Continue from the last one. */
assert(E4 == 4);
assert(E5 == INT_MAX);
return 0;
}
컴파일 및 실행 :
gcc -std=c99 -Wall -Wextra -pedantic -o main.out main.c
./main.out
Ubuntu 16.04, GCC 6.4.0에서 테스트되었습니다.
열거 형 변수의 첫 번째 값이 초기화되지 않은 경우 C 컴파일러는 자동으로 값 0을 할당합니다. 컴파일러는 선행 열거 형 변수의 값을 1 씩 계속 증가시킵니다.
예 :
enum months{jan,feb,mar}
Explanation: Value of jan will be 0,feb will be 1,mar will be 2.
enum months{jan=123,feb=999,mar}
Explanation: Value of jan will be 123,feb will be 999,mar will be 1000.
enum months{jan='a',feb='s',mar}
Explanation: Value of jan will be 'a',feb will be 's',mar will be 't'.
Yes,enum value bydefult start from 0 to n'th element to any platform.
참고URL : https://stackoverflow.com/questions/6434105/are-default-enum-values-in-c-the-same-for-all-compilers
'program tip' 카테고리의 다른 글
작동하지 않는 JavaScript 규칙은 무엇입니까? (0) | 2020.08.15 |
---|---|
TensorFlow에서 단계와 시대의 차이점은 무엇입니까? (0) | 2020.08.15 |
"java -cp"와 "java -jar"의 차이점은 무엇입니까? (0) | 2020.08.15 |
배열 대 벡터 : 입문 유사점 및 차이점 (0) | 2020.08.15 |
matplotlib를 가져올 때 시간이 걸립니다. (0) | 2020.08.15 |