これはファイル「1.c」です
#include <stdio.h>
char foo;
int bar(){
}
int main(){
printf("%d",foo);
return 0;
}
//--------------------------
これはファイル「2.c」です
void foo(){
}
として呼び出されるコンパイラgcc 1.c 2.c
上記は未定義の動作をしますか? 私の推測では、そうです。そうでなければ、最適化を行うことはほとんど不可能です。
同じエンティティに対する複数の異なる定義 (クラス、テンプレート、列挙、インライン関数、静的メンバー関数など) [C++ プログラマーが知っておくべき一般的な未定義の動作は何ですか?
しかし、私が知る限り、リンケージでvoid foo(){}によってオーバーライドできる弱いシンボルchar foo
のみを生成します。さらに、 に変更しても、それはまだ定義ですか?char foo
extern char foo