2011-11-28 11 views
0

内部リンケージの定義によると、どこにでも読んだところによると、内部リンケージとはオブジェクトがファイルスコープで、または同じファイル内のどこにでも見えるということです。内部リンケージについての混乱

int main() 
{ 
    extern int i; 
    i = 0; //linker error 
} 

static int i; 

あなたはそれがそのメイン後に宣言した場合、その前に定義することなく()、内部iを見えるようにする方法持っていますか?

+0

私はあなたが本当に**持っている問題を疑うのは、 'int'の宣言に関するものです。本当の問題を詳しく説明できますか? –

答えて

1

これはリンクの問題ではなく、コンパイルの問題です。 mainがコンパイルされた時点で、iはまだ宣言されていません。したがって、main関数の前にiを入れてコンパイルする必要があります。

+0

私はそれの前に 'extern int i'を置いても、リンクはまだありません。更新しました。 – user103214

+0

「extern」が何を助けるべきか分かりません。どうしてあなたの 'main'の前に' i'の宣言を入れてそれをやってみませんか? – Constantinius

+0

それは、内部のリンケージについての質問をする目的を破るでしょう。 – user103214

1

あなたはいくつかの問題を混同しています。まず、「リンケージ」はシンボルであり、オブジェクトではありません。第二に、リンケージから独立して、シンボルを使用する前に宣言する必要があります。メインの前にstatic int iを入れても問題ありません。

0

あなたの解決策は機能しません。externは変数がグローバルに表示されていると言っていますが、staticはそうではないと言います。

おそらく、リンカーは、これが2つの異なる変数であると考えて、混乱します。

には、使用前にすべてのオブジェクトを宣言する必要がありますが、一貫している必要があります。

関連する問題