【发布时间】:2021-06-11 04:59:06
【问题描述】:
TL;DR:假设enum NAME {...}; 在执行期间enum NAME n 与int n 相同,是否正确? n 是否可以像 signed int 一样被操作,即使它被声明为 enum NAME?原因:我真的很想使用enum 类型作为返回标志,作为关于位操作的“关闭”类型。
例如:让typedef enum FLAGS { F1 = 0x00000001, F2 = 0x00000002, F3 = 0x00000004 } FLAGS ;
然后,FLAGS f = F1 | F2; 将3 分配给f,不会抛出任何相关的错误或警告。这个和许多其他编译器允许的使用场景,比如f++,让我觉得我可以合法地对待f,就好像它是signed int。使用的编译器:MSVC'19, 16.9.1,设置“C17 (2018) Standard (/std:c17)”;
我搜索了标准(草图here)并查看了其他相关问题,但没有提到怀疑(并希望)将enum NAME x 的“无声促销”signed int x,即使标识符具有该类型。这让我相信enum 在分配一个不是成员的值时的行为方式是依赖于实现。我询问的部分原因是为了确认或否认这一说法。
【问题讨论】:
标签: c types enums standards c17