2011-01-26 52 views
3

可能重複:
C++ Header order頭文件爲了

// Here is module This.cpp 
#include <boost/regex.hpp> 
#include <iostream> 
#include <math.h> 
#include "mystring_written_by_c.h" 
#include "mystring_written_by_cpp.h" 
#include <list> 
#include <string> 
#include <stdio.h> 
#include "stdafx.h" // for precomp 
#include <tchar.h> 
#include "This.h" 
#include <Windows.h> 
#include <Winsock2.h> 

他們按照字母排序現在。
我找到訂購它們的最佳做法。 (有沒有一個很好的公式?)

你將如何訂購這些頭文件?爲什麼?

+0

您是否有錯誤,或者您在詢問訂購`#include`指令的最佳做法是什麼? – 2011-01-26 02:47:01

+0

最佳實踐。 – Benjamin 2011-01-26 02:49:07

+2

可能的重複:http://stackoverflow.com/questions/614302/c-header-order。另外:http://stackoverflow.com/questions/2762568/c-c-include-file-order-best-practices。 – Maxpm 2011-01-26 02:52:36

回答

5

應儘可能地寫入標頭1)獨立於可能已包含的內容,2)不爲後面包含的標頭引入問題(例如常見標識符的宏)。當這兩個都是真實的時候,你包括的順序並不重要。如果這些不是真的,你應該在你自己的頭文件中解決這個問題,否則必要時處理它。

因此,選擇是任意的,但是您做出選擇仍然很重要! 「計劃沒有什麼,但計劃就是一切。」一致性導致更易讀的代碼。

相對常見的順序是標準庫,系統(如OS),外部庫,然後是與當前文件相同的項目的頭文件 - 除了包含其「對應」頭文件的實現文件之外(如果有一個)首先,在任何包含或其他代碼之前。在每個組中,我按照習慣按字母順序排序,因爲再一次,它完全是任意的,但是一些易於使用的順序讓我可以快速讀取和更新列表。

應用到你的列表:

// first only because this is required in your precompiled header setup 
#include "stdafx.h" 

// it's too bad this can't really be first 
// I'm guessing "This" refers to the corresponding header 
#include "This.h" 

// C stdlib then C++ stdlib is what I usually do, 
// whether the C headers are spelled XXX.h or cXXX. 
#include <math.h> 
#include <stdio.h> 
#include <iostream> 
#include <list> 
#include <string> 

// someone mentioned winsock2 needs to be before windows 
#include <Winsock2.h> 

#include <tchar.h> 
#include <Windows.h> 

#include <boost/regex.hpp> 

#include "mystring_written_by_c.h" 
#include "mystring_written_by_cpp.h" 

換行符上面分成組是故意的。我會留下評論,爲什麼winsock2有自己的組,但其餘的評論通常不會在那裏。

2

把你的頭文件放在什麼順序上並不重要。這主要是一個選擇問題。許多人先把系統頭文件(<>之間的頭文件)和私人頭文件放在一起,但這取決於你。

2

它高度依賴於如何將包括在內。如果沒有人依賴於另一個,你可以相對自由地使用你自己的方案(一般來說,如果另一個需要,最重要的頭文件將被隱含地包括在內)。

但是,請注意,WinSock2.h必須包含在Windows.h之前,否則很有可能在編譯時出現鏈接器錯誤。

祝你好運!
Dennis M.

1

標準庫,然後系統標題不在標準庫,然後私人標題。用空行分隔每個類別。評論任何需要解釋的東西。

如果您有依賴關係,請在依賴它們的頭文件之前包含頭文件依賴的頭文件(doi!)。