使用 #ifdef 和 #ifndef(C 预处理器)移植 C 代码
我正在将 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 构建选项中。
I'm porting an iPhone game to Mac and I'm writing a file with common defines that has the following:
// 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
But when building for iPhone, both err1 and err2 are thrown by the compiler.
I don't get it, what's the problem there?
EDIT: After about an hour of trying things with no luck, I had to add my own define to xcode build options.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你的代码没问题。在我的编译器(gcc mingw)上抛出
#error err2
。如果我插入您的
// set Defines
所在的位置,则会抛出#error err1
。Your code is fine. On my compiler (gcc mingw)
#error err2
is thrown. And if i insertwhere your
// set defines
is,#error err1
is thrown.这看起来像是编译器错误,或者您需要 Apple 的特殊许可才能使用 #ifndef (这是一个笑话(我认为)。)
您可以尝试可能与 Apple 编译器一起使用的等效语法:
#if !define(TARGET_IPHONE)
或
#if !TARGET_IPHONE
甚至
#ifdef TARGET_IPHONE
#else
不过,这令人担忧 - 我会寻找更新的或不同的编译器。
This looks like either a compiler bug, or you need special permission from Apple to use #ifndef (that's a joke (I think).)
You might try this equivalent syntax that might work with Apple's compiler:
#if !defined(TARGET_IPHONE)
or
#if !TARGET_IPHONE
or even
#ifdef TARGET_IPHONE
#else
This is worrisome, though - I'd look for an updated or different compiler.