2

この質問で私は理由を尋ねました

//foo.h
namespace foo{
    int bar;
}

foo.h複数のファイルに含めると、リンカーエラーが発生しました。extern int bar;エラーを防ぐ必要があることがわかりました。なぜ必要なのexternですか?extern複数の翻訳単位でアクセスしたいすべての名前空間のすべての変数の前に入力したくありません。なぜint bar;私が期待したことをしないのですか?なぜC++標準委員会は私をexternどこにでもタイプさせることを主張するのですか?

4

2 に答える 2

10

Externは、変数のストレージ宣言は他の場所で行われると述べています。次に、リンカはリンク時に別のファイルでシンボルを探します。externを使用せずに、コンパイラーに指示している場合は、グローバル用にスペースを割り当てます。複数のファイルでこれを行うと、リンカは同じシンボルの複数のインスタンスを認識します。

于 2012-10-06T20:02:16.473 に答える
3

なぜC++標準委員会は私をどこでもexternとタイプさせることを主張するのですか?

どこにでも書くように言われたことはありません…。

namespace foo{
extern "C++" {
    int bar;
    int car;
    int dar;
    int xar;
}

}
于 2012-10-06T20:10:24.960 に答える