2011-03-06 67 views
1

我移植的iPhone遊戲到Mac和我正在寫有共同定義了一個文件,該文件有以下幾點:移植的C代碼的#ifdef和的#ifndef(C預處理器)

// first reset all defines 

#undef TARGET_IPHONE 
#undef TARGET_MAC 

// set defines 

#if TARGET_OS_MAC 
#if TARGET_OS_IPHONE 
#define TARGET_IPHONE 
#else 
#define TARGET_MAC 
#endif 
#endif 

#ifdef TARGET_IPHONE 
#error err1 
#endif 

#ifndef TARGET_IPHONE 
#error err2 
#endif 

但是建立時對於iPhone,編譯器會引發err1和err2。

我不明白,那裏有什麼問題?

編輯:經過大約一個小時的嘗試沒有運氣的事情,我不得不將自己的定義添加到xcode構建選項。

+1

只是一個快速代碼可讀性提示:您可以在'#'和指令本身之間放置空格(即'#if ...'),從而實現對正常縮進的合理模擬。 – 2011-03-06 21:34:42

+0

提交錯誤報告。 – 2011-03-07 01:15:05

回答

1

你的代碼很好。在我的編譯器(gcc mingw)#error err2被拋出。如果我插入

#define TARGET_OS_MAC 1 
#define TARGET_OS_IPHONE 1 

在您// set defines是,#error err1被拋出。

0

這看起來像任何一個編譯器錯誤,或者你需要從蘋果公司特別許可使用的#ifndef(這是一個笑話(我認爲)。)

你可以試試這個相當於語法可能與蘋果的編譯工作:

#如果!定義(TARGET_IPHONE)

#如果!TARGET_IPHONE

甚至

的#ifdef TARGET_IPHONE

的#else

這是令人擔憂的,但 - 我會尋找一個更新的或不同的編譯器。