来自 (6.2.2/7) C99 标准
7.
如果在翻译单元内,相同的标识符同时出现在内部和外部链接中,则行为未定义。
虽然以下由于定义冲突而产生编译时错误
// 'x' has external linkage
extern int x;
// Here, 'x' has internal linkage
static int x;
但以下编译得很好,
// 'x' has external linkage
extern int x;
void foo() {
// Here, 'x' has internal linkage
static int x;
}
这两种情况都会调用未定义的行为吗?