我的一位同事(void) sizeof (char[0])在一条多线的末端插入了一个宏,do {...} while (0)显然是一个替代品.我环顾四周,但我找不到它的任何参考,它甚至编译它让我感到惊讶.
它是有效的C吗?我很想参考std.
如果你编译gcc -pedantic,你会收到一条警告信息:
warning: ISO C forbids zero-size array [-Wpedantic]
Run Code Online (Sandbox Code Playgroud)
C标准的最新草案,N1570,第6.7.6.2节(阵列声明者)第1段说:
如果表达式是常量表达式,则其值应大于零.
这是约束的一部分,因此char[0]是约束违规,需要来自任何符合C编译器的诊断.
(char[0]在没有声明的对象的情况下,该特定子句适用于类型名称并不是100%清楚,但一般的想法是标准C不支持零长度数组.)
gcc支持零大小的数组作为扩展,在此处记录.