内部リンケージの定義によると、どこにでも読んだところによると、内部リンケージとはオブジェクトがファイルスコープで、または同じファイル内のどこにでも見えるということです。内部リンケージについての混乱
int main()
{
extern int i;
i = 0; //linker error
}
static int i;
あなたはそれがそのメイン後に宣言した場合、その前に定義することなく()、内部i
を見えるようにする方法持っていますか?
内部リンケージの定義によると、どこにでも読んだところによると、内部リンケージとはオブジェクトがファイルスコープで、または同じファイル内のどこにでも見えるということです。内部リンケージについての混乱
int main()
{
extern int i;
i = 0; //linker error
}
static int i;
あなたはそれがそのメイン後に宣言した場合、その前に定義することなく()、内部i
を見えるようにする方法持っていますか?
これはリンクの問題ではなく、コンパイルの問題です。 main
がコンパイルされた時点で、i
はまだ宣言されていません。したがって、main
関数の前にi
を入れてコンパイルする必要があります。
私はそれの前に 'extern int i'を置いても、リンクはまだありません。更新しました。 – user103214
「extern」が何を助けるべきか分かりません。どうしてあなたの 'main'の前に' i'の宣言を入れてそれをやってみませんか? – Constantinius
それは、内部のリンケージについての質問をする目的を破るでしょう。 – user103214
あなたはいくつかの問題を混同しています。まず、「リンケージ」はシンボルであり、オブジェクトではありません。第二に、リンケージから独立して、シンボルを使用する前に宣言する必要があります。メインの前にstatic int i
を入れても問題ありません。
あなたの解決策は機能しません。extern
は変数がグローバルに表示されていると言っていますが、static
はそうではないと言います。
おそらく、リンカーは、これが2つの異なる変数であると考えて、混乱します。
には、使用前にすべてのオブジェクトを宣言する必要がありますが、一貫している必要があります。
私はあなたが本当に**持っている問題を疑うのは、 'int'の宣言に関するものです。本当の問題を詳しく説明できますか? –