C11-泛型选择中的枚举

gla*_*ank 5 c generics enums selection c11

printf("%i", _Generic(REGISTER_AX, enum SegmentRegister: 0, enum GpRegister: 1, default: 2));
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,所需的结果是1,因为REGISTER_AX是的成员enum GpRegister。即使编译器欣然接受enums作为关联类型,但2由于enum值被评估为,因此代码将打印出来int

我的问题是:有没有一种方法可以产生期望的结果,并且泛型选择中的表达式是否会与enum类型相关联?

Jen*_*edt 5

枚举类型不是对的良好测试_Generic,这有两个不同的原因。

首先,正如评论中已经提到的,这种类型的常量本身就是类型,int而不是枚举类型。

其次,使用该类型声明的值(例如,变量或强制类型转换)将与一种特定的整数类型兼容。哪种类型依赖于实现(=编译器),甚至可以从一种枚举类型变化到另一种枚举类型。

因此,将枚举类型与其他整数类型区分开来基本上是不容易的。如果您进行更深入的了解,事情会变得更加困难,因为兼容类型不是传递关系。