怎么"sizeof(char [0])"与GCC编译得很好

eva*_*ing 3 c gcc

我的一位同事(void) sizeof (char[0])在一条多线的末端插入了一个宏,do {...} while (0)显然是一个替代品.我环顾四周,但我找不到它的任何参考,它甚至编译它让我感到惊讶.

它是有效的C吗?我很想参考std.

Kei*_*son 6

如果你编译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支持零大小的数组作为扩展,在此处记录.