- ベストアンサー
ヘッダーファイルのインクルードについて
こんにちは。ヘッダーファイルなどは使う命令によっていろいろなものをインクルードしなければなりませんが、最初に全てのヘッダーファイルをインクルードするのはだめなんでしょうか?教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> インクルードしておいたほうがいいヘッダ ていうか、ある関数(標準関数や自作関数など)を使うときは、 その関数プロトタイプ宣言などを記述しているヘッダファイルを 原則としてインクルード「しなければならない」です。
その他の回答 (3)
- Tacosan
- ベストアンサー率23% (3656/15482)
実際に開発するときにそのような「原則」を作ることについては否定しませんが, 少なくとも C の規格に関していえばそんな「原則」は存在しない>#3. C のライブラリ関数は全てどこかのヘッダにプロトタイプ宣言がありますが, 「(#include しなくてもプロトタイプ宣言できる状況であれば) #include しなくてもいい」と, ちゃんと規格に書いてあります. 例えば printf なら stdio.h を #include しなくても int printf(const char *format, ...); というプロトタイプ宣言 (C99 なら restrict も必要) を自分で書いておけば OK. 一方で fprintf は FILE という型が必要で, その定義が stdio.h にしかありませんから stdio.h を #include する必要があります. まあ, こんなの自分で厳密に書くくらいなら #include する方が楽ですが. もっというと, 「自分で作った関数」では「ヘッダで宣言しない」ことも普通じゃないですかね. 「static な関数を宣言しているヘッダ」って想像できないし. といってからもとに戻ると, 関数 (やオブジェクト) を使うために (上記理由で) 「インクルードしなければならない」ヘッダならありますが, 「インクルードしておいた方がいい」ヘッダはありません. 関連する関数を全く使わないのに #include する意味ってありませんし.
お礼
分かりました。ありがとうございます。プロトタイプ宣言をやるのは面倒なので、しっかり関数種を解析して、適当なヘッダーファイルをインクルードしようと思います。
- arain
- ベストアンサー率27% (292/1049)
別に悪くはないけど、使用しないものを宣言する意味もない。 逆に、いざゼロから作る時に必要なヘッダがわからなくなると思うけど。 「おまじない」的に使用頻度の高い関数に関連するヘッダは最初から定義しておくことはよくあるけど。
お礼
分かりました。ありがとうございます。
- Tacosan
- ベストアンサー率23% (3656/15482)
標準ヘッダだけなら大丈夫 (assert.h はそんなことする意味がないけど) です. コンパイルに時間がかかるようになるけど. 自分で作ったヘッダファイルがあったら, それはそっちの問題だから知らない.
補足
分かりました。ありがとうございます。 あと、もし良かったらインクルードしておいたほうがいいヘッダを教えていただけないでしょうか?(stdio.hなど)
お礼
ありがとうございます。インクルードしないのであれば、プロタイプ宣言を行えばできるようですね。