Google C++プログラミングスタイルガイドのヘッダファイルの含む順序

2652 ワード

Google C++プログラミングスタイルは、ヘッダファイルの含む順序を以下に示します.
(1)可読性を強化し、隠れた依存性を避けるためには、C標準ライブラリ、C++標準ライブラリ、他のライブラリのヘッダファイル、自分でエンジニアリングしたヘッダファイルの順に使用します.しかし、ここで最初に含まれるのは、例えばa.cppファイルにa.hを優先的に含まなければならない優先ヘッダファイルである.優先的なヘッダファイルは、非表示依存性を低減し、ヘッダファイルとインプリメンテーションファイルが一致していることを確認するためです.具体的な例は、ccファイル(linuxプラットフォームのcppファイル接尾辞がcc)がgoogle-awesome-project/src/foo/interna l/foserverである場合です.ccでは、ヘッダファイルの順序は次のとおりです.
#include "foo/public/fooserver.h" //           

#include <sys/types.h>
#include <unistd.h>

#include <hash_map>
#include <vector>

#include "base/basictypes.h"
#include "base/commandlineflags.h"
#include "foo/public/bar.h"

ここで、隠し依存とは何か、すなわち隠し依存とは、1つのヘッダファイルが他のヘッダファイルに依存することである.
例:
//A.h :
struct BS bs;
...
//B.h :
struct BS{
....
};

// A.c 
//     
#include A.h 
#include B.h

//   B.h   
#include B.h
#include A.h

これを「依存を隠す」と言います.A.hを含めると隠し依存が见つかるので、各规范は自分のヘッダファイルを最初に置くように要求し、隠し依存が见つかります.解決策は、A.hにB.hを含めることであり、A.cに含めることではない.
(2)ヘッダファイルを含む場合は、ヘッダファイルが存在するプロジェクトのフォルダ名を付ける必要があります.すなわち、このようなプロジェクトbaseがあれば、loggingがあります.h、外部にこのヘッダファイルが含まれている場合は、include「logging.h」ではなく、include「base/logging.h」と書くべきです.
ここで「Google C++プログラミングスタイルガイド」が提唱している原則の背後に隠されている目的は、
  • 非表示依存性を低減するために、ヘッダファイルとその実装ファイルが一致するには、まず、そのプリファレンス(すなわち、対応するヘッダファイル)が含まれるべきである.
  • は、プリファレンスに加えて、一般から特殊な原則に従う.しかし、「Google C++プログラミングスタイルガイド」の順番は、C標準ライブラリ、C++標準ライブラリ、他のライブラリのヘッダファイル、あなた自身のエンジニアリングのヘッダファイルの中で最も前の1つが漏れていると思います.オペレーティングシステムレベルのヘッダファイル、例えば上述の例sys/types.hはC標準ライブラリには入れないだろうが,Linuxオペレーティングシステムが提供するSDKだろう.だからもっと正確な言い方はOS SDKだと思います.h,C標準ライブラリ、C++標準ライブラリ、その他のライブラリのヘッダファイル、あなた自身のエンジニアリングのヘッダファイル.
  • ヘッダファイルが存在するエンジニアリングディレクトリをリストするのは、名前空間が同じであるべきであり、不注意によるファイルの重複を区別するためである.

  • 参考文献
    [1]http://www.cnblogs.com/clever101/archive/2011/08/21/2147892.html [2]http://www.cnblogs.com/frydsh/p/3466660.html