10

次のようにまとめてコンパイルされた次のコードを実行していました。gcc A.c B.c -o combined

プログラム A:

#include<stdio.h>
int a=1;
int b;
int main()
{
extern int a,b;
fun();
printf("%d %d\n",a,b);
}

プログラム B:

int a;
int b=2;
int fun()
{
printf("%d %d\n",a,b); 
return 0;
}

「結合された」プログラムを実行すると、出力は次のようになりました。

1 2
1 2

さて、私はこれについていくつかの疑問を持っています:

  1. 出力がないのはなぜですか:

    0 2

    1 0

  2. a と b が 2 回定義されていませんか?

これらを明確に説明してください。私は extern を理解するのに多くの問題を抱えており、これらの疑問のいくつかは時々出てきます。

前もって感謝します。

4

4 に答える 4

1

私の知る限り、メイン関数で a と b を外部変数として定義しているため、出力は 1 2 と 1 2 になります。そのため、他のファイルからも値を取得しようとします。2番目の質問に関しては、aとbの両方が両方のファイルでグローバル変数として定義されているため、コンパイラは変数の初期化された値を取得してそれらをマージしていると思います。両方が関数内で定義されている場合、大文字と小文字が異なる場合があります。提案やその他の入力は大歓迎です。

于 2013-07-01T05:46:05.527 に答える