「ヘッダファイルには、シンボルを分析し、解決するために導いたの乗算定義された重複定義をXXX」

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つのモジュールはそのときにリンクすることを真美の嘘。

 

  

 

 

  

  

おすすめ

転載: www.cnblogs.com/zhuangquan/p/12625106.html