programing

C/C99/C++/C+++x/GNU C/GNU C99의 열거형 서명

sourcejob 2023. 7. 23. 14:12
반응형

C/C99/C++/C+++x/GNU C/GNU C99의 열거형 서명

이것은enumsigned 또는 unsigned를 입력하시겠습니까?열거형의 서명이 C/C99/ANSI C/C++/C++/GNU C/GNU C99 간에 다릅니까?

감사해요.

열거형은 정수로 표시되지만 실제 유형(및 서명)은 구현에 따라 다릅니다.

열거자 중 하나에 음수 값을 지정하여 서명된 형식으로 열거를 표시하도록 할 수 있습니다.

enum SignedEnum { a = -1 };

C++0x에서는 다음과 같이 열거형의 기본 유형을 명시적으로 지정할 수 있습니다.

enum ShortEnum : short { a };

(C++0x는 범위가 지정된 열거에 대한 지원도 추가합니다.)

완전성을 위해 C 프로그래밍 언어, 제2판에서는 열거자가 유형을 갖는 것으로 지정되어 있음을 추가하겠습니다.int(215페이지)K&R은 C 표준이 아니기 때문에 ISO C 컴파일러의 표준은 아니지만 ISO C 표준보다 이전이기 때문에 적어도 역사적 관점에서 보면 흥미롭습니다.

이건 오래된 질문입니다...하지만 저는 이것을 막 알게 되었습니다.

typedef unsigned ENUMNAME;  // this makes it unsigned in MSVC C 2015
typedef enum {v0, v1, v2, v3} ENUMNAME;

다음과 같은 2비트 부호 없는 인덱스로 사용할 수 있습니다.

typedef struct {
  ENUMNAME i:2;
} STRUCTNAME;

GCC ARM에서 시도했지만 작동하지 않습니다.
또한 WinDbg는 STORNAME.i를 v0-v3가 아닌 숫자로 표시합니다.

언급URL : https://stackoverflow.com/questions/2579230/signedness-of-enum-in-c-c99-c-cx-gnu-c-gnu-c99

반응형