• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ヘッダファイルの2重のインクルードについて)

ヘッダファイルの2重のインクルードについて

このQ&Aのポイント
  • ヘッダファイルを複数回インクルードしてもエラーにならない理由についての質問です。
  • ある書物によると、ヘッダファイルを複数回インクルードすると再定義エラーになるとされていますが、実際にコンパイルしてみると問題なく動作します。
  • RedHat Linuxでviを使用している環境で、math.hというヘッダファイルを複数回インクルードしてもエラーにならない理由を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

マクロは、定義内容が同じであれば、複数回定義してもエラーにはなりません。 そのとき、1個以上の空白類は個数が変わっても構いません。ただし、空白類が0個と1個以上は別ものとしてあつかわれるの要注意です。 他には、関数原型やオブジェクトの仮宣言も、複数あってもエラーにはなりません。 C++の場合、typedefも複数あってもエラーにはなりません。

その他の回答 (3)

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.4

標準ヘッダにも math.h があります。 自作ヘッダを、標準ヘッダと重複しない名前に変えてから もう一度やってみてはいかがでしょうか。

  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.3

2重定義にならない仕掛けがあります。 コンパイラが用意しているインクルードファイルには、 インクルードファイル毎に、特定の名前をdefineして います。 その名前が既に定義されていたら、インクルードファ イルをスキップするように作られています。 このテクニックは自分で作ったインクルードファイル に応用可能です。

  • phoenix343
  • ベストアンサー率15% (296/1946)
回答No.1

そのヘッダーファイルを開くとよくわかる 最初に #ifndef __MATH_H #define __MATH_H というような2行があるかと思います __MATH_Hと言う定義がなかったら定義せよ、て感じですね。 だから2回め読み込んだときには既に定義されているので、 #ifndef~#endifまでが読まれず、エラーにならないと。 もしないなら、別の手段ですね。