【发布时间】:2010-09-24 11:33:35
【问题描述】:
我对这段代码有效的事实感到困惑:
struct S
{
char c[];
};
S s;
根据 C++ 标准,第 8.3.4 章:
"如果常数 表达式被省略,类型 D 的标识符是 “派生声明符类型列表数组 T”的未知界,一个不完整的 对象类型。”
但我无法弄清楚“不完整的对象类型”是如何变得完整的。
感谢您的帮助!
【问题讨论】:
-
欢迎来到 SO,在提出问题时,您可以使用顶部的按钮(1010 等)来格式化代码并正确引用您的问题部分。
-
很好的链接。根据其中一个答案,它不应该编译。我已经在 gcc 4.4.4 (-ansi) 和 VC2010 上尝试了我的代码并且都编译了。
-
在 GCC 中尝试
-pedantic和-ansi- 如果您不指定-pedantic,它会启用许多与有效 C++ 不冲突的语言扩展。跨度> -
带有 -pedantic 的 Gcc 给出“零大小数组”的警告,但可以编译