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

标签 c gcc

我的一位同事在多行的末尾插入了一个 (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/

相关文章:

c - c中的BODMAS计算

linux - gcc 4.1 可以链接 gcc 4.6 构建的库吗?

c - gcc编译的程序运行速度比g++编译的快

c - 为什么 gcc 提示 gets()

c - 当我使用 system() 从 C 调用 bash 脚本时出现问题

c - 不兼容的指针类型和常量

c - 强制 GCC 忽略某些标志?

c - 在 32 位 Debian Squeeze 下编译的 C 程序导致我 friend 的 64 位程序出现段错误

c - 解析文本文件中由逗号或空格分隔的单词 - 我可以用 scanf 克服逗号吗?

iphone - 是否有用于随机性的 Mersenne Twister 算法的稳定 Objective-C 实现?