2010-04-05 57 views
0

如果我定義的預編譯的頭一樣的東西:語言中使用#define在.PCH

#define __BUILD_MAC__ 

,然後在頭文件做:

#ifdef __BUILD_MAC__ 
    typedef void* HINSTANCE; 
#endif 

這應該工作。但由於某種原因,事實並非如此。我知道,因爲當我編譯時,我得到關於HINSTANCE的錯誤,而沒有命名一個類型。

我需要做其他事情來使這些定義可用嗎?

+0

'__BUILD_MAC__'是保留的標識符。你不能有雙下劃線,名稱也不能以下劃線和大寫字母開頭。 – GManNickG 2010-04-06 00:27:20

回答

1

任何在預編譯頭文件被忽略之前定義的。考慮做你通過編譯器液位開關,或通過定義:

配置屬性 - > C/C++ - >預處理器 - >預處理定義

You can read more on MSDN

當您使用預編譯頭文件, 編譯器會忽略 在hdrstoppragma之前出現的所有預處理程序 指令(包括編譯指示)。由這樣的 預處理器指令指定的 編譯必須爲 ,與用於創建 預編譯頭文件的編譯相同。

至於GCC預編譯頭不同:一旦該第一C令牌被認爲是

甲預編譯的頭不能使用 。在預編譯頭之前,您可以使用預處理器指令 ;你可以在 甚至包含一個來自 的預編譯頭文件在另一個頭文件中,只要 在 #include之前沒有C令牌。

-1

確保__BUILD_MAC__實際上是被用來建立.PCH文件中#define d,並且被列入.PCH最後頭之前。

+0

@本,是的,我確信這是我的錯誤。我有包括,然後定義,而不是我已經定義然後包括。 – 2010-04-05 23:29:31

+0

@Ben - 再細化一下,在PCH中,如果我#include ,那麼我不必在包含頭文件的地方使用Carbon調用,對嗎?所以如果我得到這樣的錯誤:'GetNewDialog'沒有在這個範圍內聲明,並且代碼行是aDialog = GetNewDialog(16002,NULL,(WindowPtr)(-1L));這個問題會是什麼? – 2010-04-05 23:37:53

+0

你的代碼必須像pch不存在一樣寫。使用頭文件預編譯的最好方法是製作一個項目本地頭文件,該頭文件包含您項目所需的所有系統頭文件。然後,在每個.c或.cpp文件中首先包含該單個標頭。這可以使用或不使用pch,但是通過啓用pch,您可以使編譯速度更快,因爲所有這些系統文件只能處理一次。 – 2010-04-06 03:18:23