我已经在文件顶部声明并初始化了一个结构,如下所示:
struct myDataTypes {
int INT;
int DOUBLE;
int FLOAT;
} types = {0,1,2};
当我尝试在 switch
的 case
中使用 types.INT
时,我收到编译器错误,该 case标签不会减少为整数常量
。是这样吗,结构体成员不能用作整型常量?
顺便说一句,我为此使用结构而不是枚举,因为枚举会污染全局 namespace 。我更喜欢在结构中隐藏 INT
、DOUBLE
、FLOAT
的方式。
最佳答案
switch-case语句是条件跳转指令的语法糖。 case
label
在编译时转换为等效的 goto
。
在您的情况下, types
是一个结构变量,编译器将无法为其推断出等效的标签。
来自[6.8.4.2 switch 语句]
The expression of each case label shall be an integer constant expression
关于C 中初始化的结构成员不能用作整型常量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59857003/