C++相談室 part63
■ このスレッドは過去ログ倉庫に格納されています
0010デフォルトの名無しさん
2008/07/26(土) 08:14:28C だと int i; が仮定義 (tentative definition) とかいう扱いになって、
コンパイル〜リンクできるはず。
C++ だと、 extern が付いてない int i; も、初期化子が付いてる extern int i = 1; も
両方とも(仮ではない)定義とみなされる(規格の 3.1 Declarations and definitions p2 )ので、
定義が重複していることになり、 ODR 違反で未定義動作になる。(規格の 3.2 One definition rule )
g++ 3.4.4 では、並べて書くと redefinition of `int i' というエラーになった。別々の
ファイルに分けて書けばリンクエラーになると思う。 VC は、 C と同じ動作になってる
・・・と思ったけど順番変えてエラーになるのは意味が分からんな。
まぁ未定義動作なんてこんなもんだろ。
■ このスレッドは過去ログ倉庫に格納されています