私はとても小さなコードを持っています:
//example1
namespace
{
int a;
}
int a;
main()
{
a++;
return 0;
}
もちろん、g++ 4.6.1 コンパイラはそれをコンパイルできず、エラーを出力します。
./temp.cpp: In function ‘int main()’:
./temp.cpp:10:5: error: reference to ‘a’ is ambiguous
./temp.cpp:6:5: error: candidates are: int a
./temp.cpp:2:9: error: int {anonymous}::a
大丈夫!
しかし、 「 main 」関数内の変数「 a 」への参照を削除すると、プログラムは適切にコンパイルされています。
//example2
namespace
{
int a;
}
int a;
main()
{
return 0;
}
1) g++ コンパイラが変数 " a " の定義を許可するのはなぜですか?
2) それは単に g++ コンパイラの機能であり、他のコンパイラはそのようなコードをコンパイルできません (example2)?
3) g++ コンパイラには、そのようなコード (example2) を欠陥があると解釈するための対応するフラグがありますか?
みんなどうもありがとう!