2016-10-05 13 views
0

C++のexternキーワードを使用して、特定の変数に外部リンケージがあることをコンパイラに伝えることができます。定義と宣言の両方でexternキーワードを指定しても構いません

// first.cpp 

int foo = 0; 

// second.cpp 

extern int foo; 

しかし、次の使用はどうですか?両方のファイルが定義と宣言の両方で同じ変数に指定さexternキーワードを持っている

// first.cpp 

extern int foo = 0; 

// second.cpp 

extern int foo; 

注意。

大丈夫ですか?もしそうなら、違いは何ですか?

+0

と等価です標準では*が指定されていますが、変数が宣言されていて初期化子にもその宣言が与えられていれば、その変数のメモリが割り当てられます。また、変数の別の定義を追加しようとすると、コンパイラはエラーをスローします。 – grek40

答えて

3
extern int foo = 0; 

は、すべての実用的な目的のために

int foo = 0; 

と同じです。 externキーワードは重複していますが、間違ったものではありません。第二の一方が定義されている間

しかし、

extern int foo; 

int foo; 

最初のものとの差が宣言があります。

1

externは、fooの定義が別の翻訳単位であることをコンパイラに通知しないことに注意してください。すべてそれはその存在を宣言します。

したがってfooは何度も宣言できます。しかし、これは一度だけ初期化することができます。

は、したがって、あなたの特定のケースでは、あなたの文章extern int foo = 0;は[このサイト(http://www.geeksforgeeks.org/understanding-extern-keyword-in-c/)Cによればint foo = 0;

関連する問題