我们可以在c中类型转换枚举变量吗
我在采访中被问到这个问题: 是否可以将枚举变量类型转换为其他类型我们可以在c中类型转换枚举变量吗,c,C,我在采访中被问到这个问题: 是否可以将枚举变量类型转换为其他类型 我真的不知道怎么回答。是的。在Cenum中,类型仅为ints。你想怎么打就怎么打 enum cardsuit { Clubs = 1, Diamonds, Hearts, Spades }; enum cardsuit trump = Diamonds; int d = (int)trump; /* 'd' would be 2 */ C中的任何enum表达式都可以转换为任何算术类型,即任何排序和指针
我真的不知道怎么回答。是的。在C
enum
中,类型仅为int
s。你想怎么打就怎么打
enum cardsuit {
Clubs = 1,
Diamonds,
Hearts,
Spades
};
enum cardsuit trump = Diamonds;
int d = (int)trump; /* 'd' would be 2 */
C中的任何
enum
表达式都可以转换为任何算术类型,即任何排序和指针的整数或浮点。例如,这在C中有效:
const enum { nullpointer } nullpointer_variable = nullpointer;
unsigned *p = nullpointer; // initialization with an int
unsigned *p = nullpointer_variable; // initialization with an enum expression
大多数时候,您甚至不需要显式强制转换。为什么不尝试一下,看看会发生什么?是的,这是一个不错的选择@Paul let me try
enum
s是二流类型。它们实际上是某种整数类型。任何可以将int
强制转换为的对象,都可以强制转换enum
<代码>枚举x{A,B,C=42};enum x someenum=17;printf(“%d%f\n”,someenum,(double)someenum)我希望他们没有这样表述。在C中不能强制转换变量,只能转换表达式。它甚至不需要强制转换:-)枚举在C中并不总是整数。但是,可以合理地假设它们是基于整数类型构建的。@Throwback1986:C99第6.7.2.2节§2:“定义枚举常量值的表达式应为整数常量表达式,其值可表示为int。"; 编译器可以自由地使用不同的整数类型来表示枚举,但始终无法转换为int
lossless@Christoph-这正是我关于整型的观点。为了进一步说明,我当前的编译器(C99、嵌入式RTOS、ARM9)提供了一个--short枚举构建设置,它将生成一个字节或两个字节的枚举(与最直接映射到int的四字节枚举相反)。