外部変数は、ときに、この変数と関数コンパイラの出会いは、他のモジュールを探していることを示唆している、別のファイルで定義されているの前に置かれたり、変数や関数を示すために機能することが可能
な定義。
また、EXTERNもリンクを指定するために使用されます。
利用状況分析:
のような変数の前ではexternを追加します。extern unsigned int型のテスト;
コンパイラは、コンパイル時、テストが外にあるだろうと!だけなので、コンパイラはエラーにexternを追加する場合は、この変数は、他の場所で定義されているため、テストに見えます!
たとえば、この:
1> MAIN.OBJ:エラーLNK2001: "テストint型"未解決の外部シンボル(3HA @@テスト?)
1> E:\ WTL \テスト\デバッグの\ TEST.EXE \テスト:致命的なエラーLNK1120:1未解決の外部コマンド
にexternキーワードは、ちょうど私たちは、この変数のために別のファイルにコンパイラを思い出させるために、外部変数、テストと呼ばれる変数の値から引用していることから!
、他の文書に加えint型のテストでテストそれという名前の変数の定義が与えられていないために。これは、コンパイルされます。
だから私は、私はsource2.cをどうするか、source1.cで使用することができ、メイン内部で変数を定義したいのmain.c、source1.c、source2.cがあると?
非常に単純な、main.cの中で値を定義します:int型データを、
そして2つのファイルはc点と組み合わされます。extern int型データを、
この変数は、これらの3つの.cファイルに共通することができ、グローバル変数と同等のものを。
サンプルコード:
//Main.c の#include の#include "source1.h" の#include "source2.h" intデータ。 名前空間stdを使用。 ボイドメイン() { データ= 4。 adddata2(); coutの<<データ<<てendl; adddata1(); coutの<<データ<<てendl; 裁判所未満<< "Hello World"の<<てendl; } //Source1.c用 の#include "source2.h" 名前空間stdを使用。 extern int型のデータ。 ボイドadddata2() { データ=データ+ 10。 } //Source.h #ifndefの__SOURCE1_H__ の#define __SOURCE1_H__ の#include ボイドadddata1(); #include「source1.h」 名前空間stdを使用。 extern int型のデータ。 ボイドadddata1() { データ=データ+ 100。 } //Source2.h #ifndefの__SOURCE2_H__ の#define __SOURCE2_H__ の#include ボイドadddata2(); #endifの
C複数のファイル共有同じ変数(グローバル変数)
あなたは可変時間がunsigned int型のデータ= 0で宣言し、
この変数に別のソースファイルを使用したいとき。
キーワードだけを追加する必要があります。extern unsigned int型のデータ;
(、これが唯一のデータが外部変数であることを示していることに注意して、実際にストレージ容量を割り当てていない初期化されません。!)