- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ヘッダファイルの2重のインクルードについて)
ヘッダファイルの2重のインクルードについて
このQ&Aのポイント
- ヘッダファイルを複数回インクルードしてもエラーにならない理由についての質問です。
- ある書物によると、ヘッダファイルを複数回インクルードすると再定義エラーになるとされていますが、実際にコンパイルしてみると問題なく動作します。
- RedHat Linuxでviを使用している環境で、math.hというヘッダファイルを複数回インクルードしてもエラーにならない理由を教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
マクロは、定義内容が同じであれば、複数回定義してもエラーにはなりません。 そのとき、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までが読まれず、エラーにならないと。 もしないなら、別の手段ですね。