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编译器中都能正常工作.有人可以澄清一下吗?
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加到前一个枚举常量的值而得到的常量表达式的值.[...]
因此,在您的语法中,任何符合标准的编译器都将正确运行您的代码.