1

なぜこれがうまくいかないのか理解できません。ありがとう!

#include<stdio.h>
#include<conio.h>
int main()
{
    extern int i;
    int i=20;
    printf("%d",i);
}

コンパイルすると、次のエラーが発生します。

main.c: In function 'main':  
main.c:6:9: error: declaration of 'i' with no linkage follows extern declaration  
main.c:5:16: note: previous declaration of 'i' was here

注: CompileOnlineでオンラインでコンパイルされたコード

4

6 に答える 6

8

i同じスコープで 2 つの非常に異なる方法で使用しようとしているため、これは機能しません。

名前は、他の誰かが定義して いるデータ ローカル変数の両方iを参照することはできません。extern

外部変数に割り当てたいだけの場合は、再宣言しないでください。

extern int i;

i = 20;
于 2013-08-28T07:18:26.273 に答える
3

あなたは誤って再宣言していますi

#include <stdio.h>
#include <conio.h>
int main()
{
    extern int i;
    i=20;     //Simply assign the value here. why redeclare with `int`
    printf("%d",i);
}
于 2013-08-28T07:19:13.037 に答える
1

2 回宣言iしたため、再定義エラーが発生しました

于 2013-08-28T07:19:41.493 に答える
1
int i;

ここで、変数 i が宣言され、メモリが割り当てられますが、初期化されません。

extern int i;

extern が使用されるときはいつでも、変数は宣言されるだけで、メモリは割り当てられません。それにアクセスするには、同じ変数を外部で再宣言する必要があります。ここでexternはそれを指し、プログラム(外部ソース)の外部でその変数(i)の値を定義します。あなたの場合は、内部で行うため、期待どおりに機能しません。メインプログラムの外部または外部プログラムによって定義できます。

これを試して:

#include<stdio.h>
int main()
{
   extern int i; //Declared but memory not allocated
   printf("%d",i);
 return 0;
 }
int i=20; //Allocated memory for i and initialized to 20 outside the prog

出力:

20

グローバル extern 変数は直接初期化することもできますが、ローカル extern 変数は初期化できません。

#include<stdio.h>
extern int i=10; //Declared, Memory allocated and defined.
int main()
{
    extern int j; //Declared but memory not allocated
    printf("%d --> %d",i,j);
return 0;
}
int j=20; //Memory Allocated and value defined externally.

出力:

10 --> 20

詳細については、このリンクを参照することもできます。

于 2013-08-28T07:36:13.210 に答える
0

externiは、 という型のという変数が外部のどこかに存在することをコンパイラに示しますint

ここでoutsideは、同じプログラムまたは他のtranslation(別の.cファイル) ユニットにある可能性があります。

しかし、iすでに宣言したものと同じものを再宣言しています。

また、次のプログラムのみを実行している場合 (他のファイルをリンクせずに.c)は機能しません。

#include <stdio.h>
#include <conio.h>
int main()
{
  extern int i;
  i=20;     
  printf("%d",i);
}

リンカーが定義を見つけることができず、メインの外部で定義されていないためストレージが割り当てられていないiため、未解決であると不平を言うリンカーエラーが発生します。i

于 2013-08-28T08:22:22.547 に答える