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
。即使编译器欣然接受enum
s作为关联类型,但2
由于enum值被评估为,因此代码将打印出来int
。
我的问题是:有没有一种方法可以产生期望的结果,并且泛型选择中的表达式是否会与enum
类型相关联?
枚举类型不是对的良好测试_Generic
,这有两个不同的原因。
首先,正如评论中已经提到的,这种类型的常量本身就是类型,int
而不是枚举类型。
其次,使用该类型声明的值(例如,变量或强制类型转换)将与一种特定的整数类型兼容。哪种类型依赖于实现(=编译器),甚至可以从一种枚举类型变化到另一种枚举类型。
因此,将枚举类型与其他整数类型区分开来基本上是不容易的。如果您进行更深入的了解,事情会变得更加困难,因为兼容类型不是传递关系。
归档时间: |
|
查看次数: |
803 次 |
最近记录: |