C의 기본 열거값이 모든 컴파일러에 대해 동일한가?
아래와 같이 열거형을 선언할 때, 모든 C 컴파일러가 기본값을 다음과 같이 설정하였는가?x=0
,y=1
그리고z=2
어떤 기능을 사용할 수 있는지 알아보십시오.
typedef enum {
x,
y,
z
} someName;
예. 열거의 정의에서 달리 지정하지 않는 한, 초기 열거자의 값은 항상 0이고 이후의 각 열거자의 값은 이전 열거자보다 1이 더 크다.
C99 표준
N1265 C99 초안에는 6.7.2.2/3 "누적 지정자"라고 되어 있다.
=를 가진 열거자는 열거 상수를 상수 식의 값으로 정의한다.첫 번째 열거자에 다음이 없는 경우
=
, 열거 상수의 값은 0이다.no =를 가진 각각의 후속 열거자는 그 열거 상수를 이전 열거 상수의 값에 1을 추가하여 얻은 상수 식의 값으로 정의한다.(=를 가진 열거자를 사용하면 동일한 열거에서 다른 값을 중복하는 값을 가진 열거 상수를 생성할 수 있다.)
따라서 다음 사항은 항상 적합한 구현을 유지한다.
본시
#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}
설명: 잔의 가치는 0이고, 2월은 1,mar는 2가 될 것이다.
enum months{jan=123,feb=999,mar}
설명: 잔의 가치는 123이 될 것이고, 2월은 999가 될 것이고, 마르는 1000이 될 것이다.
enum months{jan='a',feb='s',mar}
설명: 잔의 가치는 'a'가 될 것이고, 2월은 's'가 될 것이고, mar는 't'가 될 것이다.
예, 정의 기준 값은 0에서 n번째 요소부터 모든 플랫폼까지입니다.
참조URL: https://stackoverflow.com/questions/6434105/are-default-enum-values-in-c-the-same-for-all-compilers
'IT이야기' 카테고리의 다른 글
Spring의 JDB로 IN() SQL 쿼리를 실행하는 방법CTEMplate 효과적? (0) | 2022.05.16 |
---|---|
Vue 인스턴스에서 구성 요소로 데이터를 전달하는 방법 (0) | 2022.05.16 |
Vuex 상태에서 v-if를 사용하는 Vue3 구성 요소 (0) | 2022.05.16 |
새 Vue 앱 버전을 릴리스할 때 크롬에서 캐시를 강제로 지우는 방법 (0) | 2022.05.15 |
Java 바이트 배열에서 문자열로 바이트 배열 (0) | 2022.05.15 |