2011-03-06 69 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

这是令人担忧的,但 - 我会寻找一个更新的或不同的编译器。