如果我定義的預編譯的頭一樣的東西:語言中使用#define在.PCH
#define __BUILD_MAC__
,然後在頭文件做:
#ifdef __BUILD_MAC__
typedef void* HINSTANCE;
#endif
這應該工作。但由於某種原因,事實並非如此。我知道,因爲當我編譯時,我得到關於HINSTANCE的錯誤,而沒有命名一個類型。
我需要做其他事情來使這些定義可用嗎?
如果我定義的預編譯的頭一樣的東西:語言中使用#define在.PCH
#define __BUILD_MAC__
,然後在頭文件做:
#ifdef __BUILD_MAC__
typedef void* HINSTANCE;
#endif
這應該工作。但由於某種原因,事實並非如此。我知道,因爲當我編譯時,我得到關於HINSTANCE的錯誤,而沒有命名一個類型。
我需要做其他事情來使這些定義可用嗎?
任何在預編譯頭文件被忽略之前定義的。考慮做你通過編譯器液位開關,或通過定義:
配置屬性 - > C/C++ - >預處理器 - >預處理定義
當您使用預編譯頭文件, 編譯器會忽略 在hdrstoppragma之前出現的所有預處理程序 指令(包括編譯指示)。由這樣的 預處理器指令指定的 編譯必須爲 ,與用於創建 預編譯頭文件的編譯相同。
至於GCC預編譯頭不同:一旦該第一C令牌被認爲是
甲預編譯的頭不能使用 。在預編譯頭之前,您可以使用預處理器指令 ;你可以在 甚至包含一個來自 的預編譯頭文件在另一個頭文件中,只要 在
#include
之前沒有C令牌。
確保__BUILD_MAC__
實際上是被用來建立.PCH文件中#define
d,並且被列入.PCH最後頭之前。
@本,是的,我確信這是我的錯誤。我有包括,然後定義,而不是我已經定義然後包括。 – 2010-04-05 23:29:31
@Ben - 再細化一下,在PCH中,如果我#include
你的代碼必須像pch不存在一樣寫。使用頭文件預編譯的最好方法是製作一個項目本地頭文件,該頭文件包含您項目所需的所有系統頭文件。然後,在每個.c或.cpp文件中首先包含該單個標頭。這可以使用或不使用pch,但是通過啓用pch,您可以使編譯速度更快,因爲所有這些系統文件只能處理一次。 – 2010-04-06 03:18:23
'__BUILD_MAC__'是保留的標識符。你不能有雙下劃線,名稱也不能以下劃線和大寫字母開頭。 – GManNickG 2010-04-06 00:27:20