【发布时间】:2013-11-21 18:49:59
【问题描述】:
这是 C++11 示例的子集(与最新草案相同)8.3.4p4 ([dcl.array]/4):
extern int x[10]; // 1
int x[]; // OK: bound is 10 // 2
void f() {
extern int x[]; // 3
int i = sizeof(x); // error incomplete type
}
gcc 不同意错误并给出:
error: type mismatch with previous external decl of ‘int x []’
改为(在声明 3 处)。
clang 编译没有错误。
我的解释是该示例格式正确。声明 3 应该链接到声明 1 和 2,因此应该具有类型 array of 10 int,而不是 array of unknown bound int。所以在sizeof应该是完整的。
谁是正确的?标准,gcc 还是 clang?
【问题讨论】:
-
也许添加编译器版本?
-
gcc 版本 4.7.2 (Ubuntu/Linaro 4.7.2-2ubuntu1),clang 版本 3.0-6ubuntu3
-
好的。我用clang 3.4对其进行了测试,它与sizeof fail一致。