0

私は、用語の宣言と定義を以下のように理解しています。

宣言:これは、指定された「名前」「型」の変数がコード内に存在することをコンパイラに通知するだけです。後で定義/割り当てできるようにする

定義:これは、メモリの適切なスペースを割り当てることによって型のインスタンスが作成されるプロセスです。

int var; //Declaration and Definition-Agreed!!!
extern int var; //Declaration only ?
static int var; //Declaration only ?

私の心は、宣言のみのステートメントとして2番目と3番目のものに同意することを拒否します. 多くの参照で、「extern 変数と static 変数は、メモリ割り当て時に自動的にゼロに初期化される」ためです。そして、次のコードでわかるように。

#include <stdio.h>
int main()
{
   static int i;
   printf("%d\n",i);
   return 0;
}

出力は 0 です。したがって、ここではstatic int i;のように見えます。宣言、定義、および自動初期化ステートメントです。したがって、これに対する正当な理由を追加してください

4

3 に答える 3

4

静的ストレージ期間を持つオブジェクトは、C ではゼロで初期化されます。

static int a; // initialized by zero
int b;        // file-scope, static storage duration, initialized by zero

int main(void)
{
     int c;        // automatic storage duration, indeterminate value
     static int d; // initialized by zero
}

acおよびdオブジェクトの宣言と定義です。

bは宣言と定義です。これbは、翻訳単位の最後まで の他のファイル スコープの出現がないためです。翻訳単位の終了前は、宣言は暫定的な定義です。

于 2012-10-08T19:01:38.820 に答える
1

ちょうど実験をして、明らかになりました。

static int i; //Declaration,Definition and Auto initialized as zero.
extern int i; //Declaration only. Will throw an error if not externally defined. 
int i; //This when declared outside any code block will be extern by default and initialised to zero
于 2012-10-08T19:13:32.700 に答える
0

この例で extern に対する疑問が解消されることを願っています。

#include<stdio.h>
extern int foo;
int main(){
foo=1;
return 0;
}

このコードは、まだ割り当てられていない場所/メモリに値を割り当てようとしたため、エラーが発生します。次のコードを検討してください。

#include<stdio.h>
extern int foo = 10;
int main(){
foo=11;
return 0;
}

このコードは、C が何らかの奇妙な動作を示すため、正しくコンパイルされます。

于 2012-10-08T19:09:49.193 に答える