枚举成员可以是ANSI-C中数组的大小吗?

Jac*_*ack 6 c standards gcc clang c89

我需要根据有多少元素来分配数组enum.我做了以下事情:

enum { A, B, C, LAST };
char buf[LAST];
Run Code Online (Sandbox Code Playgroud)

这很好,即使有-ansi -pedantic旗帜也行.但我不确定它是GCC还是clang(它支持大多数,如果不是所有的GCC扩展)扩展或ANSI C标准真正允许,并且在任何带有ANSI-C标准的C编译器中都能正常工作.有人可以澄清一下吗?

uto*_*ven 6

C89(第3.5.2.2节)和C99(第6.7.2.2节)标准都以相同的方式定义枚举:

6.7.2.2查点指标(第3段),http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf

3.5.2.2枚举说明符(第3段),http://flash-gordon.me.uk/ansi.c.txt

两者都读:

[...]枚举器使用=将其枚举常量定义为常量表达式的值.如果第一个枚举数没有=,则其枚举常量的值为0.每个后续的枚举数为no =将其枚举常量定义为通过将1加到前一个枚举常量的值而得到的常量表达式的值.[...]

因此,在您的语法中,任何符合标准的编译器都将正确运行您的代码.