1.問題
main.h
#ifndefの_MAIN_H の#define _MAIN_H unsigned char型I; #endifの
main.cの
#include "main.h" メイン() { 。 }
交流
#include "main.h" 略
その後、コンパイル交流とmain.cの、あなたは私が乗算(AOおよびmain.oによって)定義された記号のプロンプトが表示されます
2.分析
2.1は#ifndefのコンパイル済みの重複を防ぐことではありませんか?
#ifndefのに#define #endifの「リピートコンピレーション」の代わりに防ぐ「重複定義を。」
繰り返しコンパイルが重複した定義になる場合がありますが、ない重複定義ソースのみコンパイルを繰り返します。
実行可能プログラムへのコードから、それは2つのステップが必要で
コンパイルとリンクする
すべて置き換えヘッダファイルは、コードにヘッダファイルを#include始まり、コンパイル
の各モジュールは、すべてのソースファイルがモジュールになって、コンパイル、コンパイル時に各変数および関数は、独自の空間となっている
、モジュールのそれぞれが一緒に結合され、リンク段階で
コンパイルフェーズ中に防止することができる#ifndefの、コードを繰り返し、それによって定義される繰り返し変数を回避するコンパイルされ
、それが妨げません変数の再定義:リンクフェーズでは、各モジュールは、リンク・エラーと呼ばれる、という変数名を持っています
3.ソリューション
単にヘッダファイル内でextern宣言入れ、リピート#ifndefの組み合わせのコンパイルを防ぐために、変数は、ソースファイルで定義されていないだけ。
だから、コンパイル時に各モジュールは、あなたが「非常に多くの変数があるが、そのスペースは私と一緒ではない」ことを知っているすべてのモジュールに存在するものの、変数はヘッダファイルが含まれていますが、唯一の1つのモジュールはそのときにリンクすることを真美の嘘。