2012-01-26 41 views
4

有時在C++中包含順序的事項。這是用OpenGL的情況下:#包括避免鏈接錯誤的順序

1 .-正確的做法:

#include <windows.h>    // Header File For Windows 
#include <gl\glu.h>     // Header File For The GLu32 Library 

2:錯誤的方式:

#include <gl\glu.h>     // Header File For The GLu32 Library 
#include <windows.h>    // Header File For Windows 

這是否對一些剛發生特定的頭文件還是難以預測的隨機難題?

如果是這樣的話:

我怎麼能知道的包括正確的順序?

+4

這與_linking_無關,只能編譯。 –

+0

@JoachimPileborg:不一定。宏中的宏可能會改變另一個宏中的函數原型,從而導致未解決的外部事件。 –

回答

4
  1. 只是一些特定的標題。有人可能把它稱爲設計缺陷。
  2. 你不能。看看你得到的錯誤信息並仔細分類。在windows上,首先放置windows.h可能是一個好主意。
2

順序對於C++標準庫包括無關緊要。
對於其他圖書館來說,它通常不應該很重要(除非他們特別說明)。
對於特定的平臺,它可能很重要,它通常在指定平臺上明確指定。

對於前:

在Windows #include <windows.h>來自所有其他包括前。

此外,
#include <stdafx.h>
這是MSVC++的特定頭需要,如果你使用預編譯頭要高於一切包括在內。

+0

爲什麼呢? –

+0

'stdafx.h'是Visual Studio嚮導生成的廢話。如果你打算使用預編譯頭文件,可以將它稱爲'precompiled.h'或'common.h'或其他合理的東西。尖括號不應該用於像「stdafx.h」這樣的項目本地頭文件。 –

2

對於windows,您首先需要#include <windows.h>

然後在頭文件中避免#include - 優先選擇前向聲明。

只需更改一個頭文件即可節省編譯時間。

2

有一段時間,一些知名的C程序員建議沒有頭文件應該包含任何其他頭文件 - 應該由用戶以正確的順序包含正確的頭文件來使其工作。對於不包含太多頭文件的小型項目來說,這種方法很有效(並繼續工作)。但是,對於大型項目,跟蹤所有頭文件依賴關係可能會變得相當困難,甚至在很多現代代碼庫中幾乎無法管理。大多數現代標題本身都包括它們依賴的任何其他標題。

不幸的是,這意味着我們經常會以兩者相當混亂的混合物結束。除了在出現問題時處理問題,通過查找需要包含哪些標題以及以何種順序進行處理,您無能爲力。