2011-09-30 15 views
5

私は、ユーザーのUse of 'extern' keyword while defining the variableextern int aの差異; extern int a = 42;

一つの答えを読んでいたが、私は両方の定義が、宣言ではありません期待していたこれらの方法に

extern int a;  // not a definition 
extern int a = 42; // definition 

に答え。私は両方のステートメントが変数が関数の外で定義されていると言っていると思っていました。そして、externキーワードを使用する必要があります。これは彼の間違いですか、それとも本当に定義ですか? 私は

extern int a; // variable is already defined but its outside the function 
extern int a=42 ; //I guess a variable is assigned a value but not a definition 

が、これらの文は

extern int a = 42; // user said its a definition and now i got confused 

これらで私をクリアしてくださいことを知っています。

+0

宣言で外部定義されたmain()関数内で宣言された値を割り当てリンクされた質問で議論されているすべては、関数スコープではなくファイルスコープ宣言であるとみなされます。 –

答えて

7

初期化を試みるたびに、externが使用されていても、文はの定義になります。デフォルトではstaticとマークされていないシンボルはすでに外部リンケージを持っているため、externキーワードは冗長です。

は外部変数を宣言し、現在のコンパイル単位で初期値を設定しても意味がありません。これは矛盾です。

+0

うわー!私はcが本当に奇跡の言語であることを知らなかった – niko

+0

あなたはextern int a = 42を意味します。 int = 42だけですか?右 – niko

+0

大丈夫私はあなたが私のコンパイラでそれを試してみましょう私の心にいくつかの考えを持っていると私はそれに問題がある場合私の質問を更新してください。しかし、ありがとう! – niko

5

extern int a;は宣言です。 aを格納するためのスペースを割り当てません。

extern int a = 42;は定義です。それは、INT値Aを格納するためのスペースを割り当て、それを42

0

、ここで、変数は、その定義はグローバル宣言部

extern int a; //This is a declaration 

extern int a=42; //This is a definition 
+2

極端!ええ! – UmNyobe

関連する問題