C 中初始化的结构成员不能用作整型常量吗?

标签 c struct initialization integer constant-expression

我已经在文件顶部声明并初始化了一个结构,如下所示:

struct myDataTypes {
    int INT;
    int DOUBLE;
    int FLOAT;
} types = {0,1,2};

当我尝试在 switchcase 中使用 types.INT 时,我收到编译器错误,该 case标签不会减少为整数常量。是这样吗,结构体成员不能用作整型常量?

顺便说一句,我为此使用结构而不是枚举,因为枚举会污染全局 namespace 。我更喜欢在结构中隐藏 INTDOUBLEFLOAT 的方式。

最佳答案

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/

相关文章:

c - C语言生成 "In-Range"随机数

java - 实例初始化器和 *this* 关键字

c编程默认参数: const struct vs init function

C++11 大括号/聚合初始化。什么时候使用它?

c - 在 C 中使用函数和动态内存分配进行线性搜索

c - 对内存映射 IO 的写操作会导致段错误

c - 通过递归函数泄漏线程

c - struct 的底层是如何工作的?

c - 结构体数组

java - 返回数组的第一个结构体为空