web-dev-qa-db-ja.com

最初にローカルヘッダーを含める

だから私は あなたのインクルードの順序 を読みました、そしてこの男はあなたがそれが前提条件を持っていないことを確認するためにあなたが最初にあなたのローカルヘッダーをインクルードすることを提案しました。わかりました。私は乗船しています。全体の区画化は良いです。

しかし、私はこのファイルfile.cを持っています。これには、ファイルを保存する関数を宣言するfile.hが含まれています。これは、fopenとその友人が使用するFILE*タイプを渡します。

file.hをインクルードする前にstdio.hをインクルードすると、file.hタイプがわからないため、FILE*をビルドするときに明らかな解析エラーが発生します。

私は単純なものを見逃さなければならないことを知っていますが、これをグーグルが使用できるものに定式化することができます。 file.hで何か違うことをする必要がありますか?これは単に特定の順序で含める必要があるものですか?考え?

3
Philip

file.hなどのヘッダーファイルがstdio.hなどの他のヘッダーに依存している場合、file.hは必要に応じてそれらのヘッダーを#includeする必要があります。

各ヘッダーファイルは、それ自体の依存関係を追跡し、#includeガードを使用して、複数回インクルードされた場合に複数の翻訳を防止する必要があります。

#ifndef FILE_H
#define FILE_H

#include <stdio.h>
...
void myfunc(FILE *);
...
#endif

このように、インクルードの順序は単純に関係ありませんであり、これによりメンテナンスが多くクレイジーになりません。

10
John Bode