使用#ifdef和#ifndef(C预处理器)移植C代码

时间:2011-03-06 20:29:41

标签: c macos c-preprocessor

我正在将iPhone游戏移植到Mac上,我正在编写一个包含以下内容的常用定义文件:

// 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构建选项中。

2 个答案:

答案 0 :(得分:1)

你的代码很好。在我的编译器(gcc mingw)#error err2被抛出。如果我插入

#define TARGET_OS_MAC 1
#define TARGET_OS_IPHONE 1

// set defines所在的位置,#error err1被抛出。

答案 1 :(得分:0)

这看起来像是一个编译器错误,或者你需要Apple的特别许可来使用#ifndef(这是一个笑话(我认为)。)

您可以尝试使用可能适用于Apple编译器的等效语法:

#if!defined(TARGET_IPHONE)

#if!TARGET_IPHONE

甚至

#ifdef TARGET_IPHONE

的#else

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

相关问题