あなたはを見てとることができ、このブログ。
変数や関数ができ、何度も宣言されますが、ほとんどは一度だけ定義することができ、かつ、変数や関数で使用され、一度定義しておく必要があります。(関数/変数を使用しない場合は、それだけ宣言定義することができません)
文がするかどうかをまず決定変数を宣言:変数の前に存在する場合に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つであるので、私は二重に定義するので、リンクエラーされる変数に対応します。