NO IMAGE

     1、使用#define防止多次包含(multiple inclusion),巨集命令規則:project_path_file_H_,如專案test中include目錄下一個檔案foo.h,巨集定義為:#define TEST_INCLUDE_FOO_H_;

2、儘量使用前向宣告代替標頭檔案包含。原因:

A檔案包含:

B.h

C.h

B或C標頭檔案發生變化時,編譯時A檔案及依賴A.h的所有檔案都要重新編譯。

標頭檔案中可以使用前向宣告代替標頭檔案包含情況有:

1)、指標或引用變數;

2)、引數、返回值型別的函式(只能是宣告,不能包含實現,實現放到cpp檔案中情況);

3)、靜態資料成員的宣告。

如:

#ifndef GOOGLEFORMATCODE_FORWARDDECLARATION_H_
#define GOOGLEFORMATCODE_FORWARDDECLARATION_H_
class CTestA;
class CForwardDeclaration
{
public:
CForwardDeclaration();
~CForwardDeclaration() {}
public:
void SetTestA(const CTestA& testA);
CTestA GetTestA();
void SetTestATwo(CTestA testA);
private:
CTestA*				m_pTestA;
CTestA&				m_TestA;
static CTestA			s_TestA;
};
#endif

3、行內函數的使用,一般有以下規則:

1)、程式碼行數小於10行的;

2)、不能包含有迴圈、條件語句;

3)、virtual、遞迴函式不能是行內函數;

4)、行內函數比較複雜時,實現可以放到以-inl.h結尾的檔案中(注意,這個檔案也需要#define保護,防止多次包含)。

行內函數和普通函式一個比較大區別:程式碼呼叫行內函數會類似呼叫巨集定義,會把程式碼在呼叫的地方展開;而普通函式會做一些記錄,然後跑到函式中執行,執行結束後再返回,繼續執行剩下的語句。

4、函式引數,一般輸入引數在前,輸出引數在後(有些引數可能再者皆有,所以,這個引數順序規則不強制要求)。

5、包含檔案的名稱和次序:將包含次序標準化可增強可讀性、避免隱藏依賴。

包含的名稱避免使用.(當前目錄)和..(父目錄)這種UNIX檔案路徑。

包含次序:C庫、C 庫、其他庫的.h、專案內的.h。

例如:
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

一般解決要麼在.h檔案中包含B.h檔案或是在.h中使用前向宣告(如果可以,更推薦使用前向宣告)。

這樣就叫”隱藏依賴”

參考:http://www.cnblogs.com/HappyYouxi/archive/2014/04/15/3666476.html