我的一位同事在多行的末尾插入了一个 (void) sizeof (char[0])
,宏作为 do {...} 的替代方法 while ( 0)
显然。我环顾四周,但找不到对它的任何引用,令我惊讶的是它甚至可以编译。
C 有效吗?我希望引用标准。
最佳答案
如果您使用 gcc -pedantic
进行编译,您将收到一条警告消息:
warning: ISO C forbids zero-size array [-Wpedantic]
C 标准的最新草案,N1570 ,第 6.7.6.2 节(数组声明符)第 1 段说:
If the expression is a constant expression, it shall have a value greater than zero.
这是约束的一部分,因此 char[0]
违反了约束,需要任何符合标准的 C 编译器进行诊断。
(在没有声明的对象的情况下,该特定子句适用于类型名称 char[0]
并不是 100% 清楚,但一般的想法是标准 C 不支持零-长度数组。)
gcc 支持零大小数组作为扩展,documented here .
关于c - "sizeof (char[0])"怎么用 GCC 编译得很好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30566532/