dポイントプレゼントキャンペーン実施中!

こんにちは。ヘッダーファイルなどは使う命令によっていろいろなものをインクルードしなければなりませんが、最初に全てのヘッダーファイルをインクルードするのはだめなんでしょうか?教えてください。

A 回答 (4件)

> インクルードしておいたほうがいいヘッダ



ていうか、ある関数(標準関数や自作関数など)を使うときは、
その関数プロトタイプ宣言などを記述しているヘッダファイルを
原則としてインクルード「しなければならない」です。
    • good
    • 0
この回答へのお礼

ありがとうございます。インクルードしないのであれば、プロタイプ宣言を行えばできるようですね。

お礼日時:2008/07/16 16:22

実際に開発するときにそのような「原則」を作ることについては否定しませんが, 少なくとも 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 する意味ってありませんし.
    • good
    • 0
この回答へのお礼

分かりました。ありがとうございます。プロトタイプ宣言をやるのは面倒なので、しっかり関数種を解析して、適当なヘッダーファイルをインクルードしようと思います。

お礼日時:2008/07/16 16:24

別に悪くはないけど、使用しないものを宣言する意味もない。


逆に、いざゼロから作る時に必要なヘッダがわからなくなると思うけど。

「おまじない」的に使用頻度の高い関数に関連するヘッダは最初から定義しておくことはよくあるけど。
    • good
    • 0
この回答へのお礼

分かりました。ありがとうございます。

お礼日時:2008/07/15 20:18

標準ヘッダだけなら大丈夫 (assert.h はそんなことする意味がないけど) です. コンパイルに時間がかかるようになるけど.


自分で作ったヘッダファイルがあったら, それはそっちの問題だから知らない.

この回答への補足

分かりました。ありがとうございます。
あと、もし良かったらインクルードしておいたほうがいいヘッダを教えていただけないでしょうか?(stdio.hなど)

補足日時:2008/07/15 20:19
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!