【发布时间】:2018-11-27 04:16:22
【问题描述】:
例如,在一个源文件中:
extern int a[10];
int main()
{
(void)sizeof(a);
return 0;
}
在第二个源文件中我们有:
int a[20];//different with the first source
上面的代码会导致未定义的行为吗?据我所知,在 C 它说:
引用同一对象或函数的所有声明都应具有兼容类型;否则,行为未定义。
int[10] 和 int[20] 是否兼容(在 c 看来)?那么C++标准呢?
另外,如果没有第二个源文件,使用sizeof(a)是否合法(a只有一个声明)?
【问题讨论】:
-
1.是的,它确实会导致 UB 2。是的,它是合法的。
-
@n.m.标准是否涵盖过这种情况?我找不到那个。
-
你问的是 2 种语言,所以这就像 3 个问题合而为一
-
@AnttiHaapala 我相信这是一个有效的问题,OP 对它在 C 中所说的内容有一些概念,并且想知道它是否是未定义的行为,并且还想了解它是否适用于 C++。措辞可能会更好。
-
@ShafikYaghmour 不好的先例。当前的标签 wiki 说:“一个问题应该用 c 和 c++ 标记,如果它是关于:* C 和 C++ 之间的特定差异”。这是问题 3。问题 1 和问题 2 是 C++ 和 C 问题,这些定义是否兼容。
标签: c++ c language-lawyer undefined-behavior