セクション(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;
}
どちらの場合も未定義の動作を引き起こしますか?