2016-07-07 10 views
2

これは修正する問題ではありませんかsomething.Justは行動ここ変数varが参照されないのはなぜですか?

#include <stdio.h> 
extern int var; 
int main() 
{ 
    var = 10; 
    printf("%d ", var); 
    return 0; 
} 

我々はvarexternようとvarは、定義を与えられたmain()関数の内部で定義されていたことがわかりますに知ってほしいです。 varが出力されたとき、しかし、それはエラーにvar

未定義の参照を与えました。

次に、値10はどこに行きますか?それはextern varに行きますか、それともガーベッジメモリの場所に保存されますか?

だから、正確にラインvar =10し、次の行でコンパイル時に何が起こりますか。

コンパイルログ:あなたのコードで

Compilation error time: 0 memory: 2156 signal:0 
/home/PpnviQ/ccRtZapf.o: In function `main': 
prog.c:(.text.startup+0x13): undefined reference to `var' 
collect2: error: ld returned 1 exit status 
+2

'var'はコードに定義されていません。ちょうど宣言しました。 – Olaf

+0

@Olafまさに '' 'VAR = 10'''手段、それは望ましい行動、特定の問題やエラーが含まれている必要があり、デバッグの助けを(「なぜこのコードは動作していない?」)を探している –

+0

質問を定義する平均does'nt質問自体の中でそれを再現するのに必要な最短のコードです。明確な問題文がない質問は、他の読者にとって有用ではありません。参照:最小、完全、および検証可能な例を作成する方法。 – Olaf

答えて

9

extern int var; 

宣言、ない定義です。したがって、完全翻訳単位では、varは定義されません。あなたは使用こと、(varに値を代入)しようとすると、だからあなたのリンカは(具体的には)文句を言います。

+0

@Olafの権利、明確にするために更新、ありがとう。 :) –

+1

'extern'宣言を宣言するだけで、どこかの定義を待つよう警告するので、コンパイラは問題ありません。通常、' extern'キーワードは他のユニットで宣言された変数を参照するために使われます。あなたは、リファレンスがぶら下がっているのを見つけたリンカからの警告を受けています。 – weirdgyn

+0

@LPs thnx ..ただこれを修正しました! :-) – weirdgyn

関連する問題