宣言と定義の理解

  あなたはを見てとることができ、このブログ

変数関数ができ、何度も宣言されますが、ほとんどは一度だけ定義することができ、かつ、変数や関数で使用され一度定義しておく必要があります(関数/変数を使用しない場合は、それだけ宣言定義することができません)

  文がするかどうかをまず決定変数を宣言:変数の前に存在する場合にextern キーワード、それは文は、元の変数があれば、ではないにextern キーワード、それはされて定義されました

extern  int型 I;     // 宣言iは
int型のI;             // iは初期化されるために、私の定義が、
int型私は= 5 ;         //は私が初期化されている間、定義です。

 

  要するに:文が宣言文であるかどうかを決定するために、キーがステートメントが含まを見ることであるにextern キーワードをよりもむしろ声明を見ては、「=」が含まれ、 「=」役割は、変数を初期化することです

  一つの例外:  にextern int型私は= 5 ;  この文が定義され、この文の役割には、int型のグローバル変数の型を定義することですが、私と呼ばれる、私は5の初期値です。

  :あなたは、エラーを取得します、関数本体内のステートメントを使用することはできませんエラーC2205:「を私は」:変数のスコープと初期化にexternをブロックすることはできません。それだけで関数の外使用、およびの役割することができます「私は5 = INT;」と同じ。「だから、私は5 =のextern int型の小さな値にこの文を」。

  

  第二は、文があるかどうかを決定する関数宣言機能は身体の実装が含まれている場合すなわち、「{} 、それは定義された関数別段の関数宣言

ボイド楽しい()         // 関数定義
{ 
} 

ボイド楽しい()     // 関数宣言

  宣言関数や変数を実際にコンパイラに言われている:この関数/変数がある存在のみを使用する場合、変数/関数で、コンパイラがために行くだろう確認変数/関数を、変数/関数は実際には存在しないことが判明した場合、それは失敗を構築する、本当に存在しています。

  変数/ 関数が本当に存在しているかどうかに応じて定義変数/関数の。

  ヘッダファイルああがある場合は、ああ、私は、変数を定義「私をint型を;」;同時BCおよびCCが存在する場合、ああ含まれ、ビルドエラーがなぜプロジェクト、次の場合に発生します。実際にはBCとccは「int型の私が含まれているため;「は、それぞれこの文、BCコンパイル及びCC、」INT iは、「このステートメントをコンパイルすると、2つであるので、私は二重に定義するので、リンクエラーされる変数に対応します。

 

 

おすすめ

転載: www.cnblogs.com/XiaoXiaoShuai-/p/12008629.html