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

发布于 2024-10-20 11:13:12 字数 488 浏览 1 评论 0原文

我正在将 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

怂人 2024-10-27 11:13:12

你的代码没问题。在我的编译器(gcc mingw)上抛出#error err2。如果我插入

#define TARGET_OS_MAC 1
#define TARGET_OS_IPHONE 1

您的 // set Defines 所在的位置,则会抛出 #error err1

Your code is fine. On my compiler (gcc mingw) #error err2 is thrown. And if i insert

#define TARGET_OS_MAC 1
#define TARGET_OS_IPHONE 1

where your // set defines is, #error err1 is thrown.

等数载,海棠开 2024-10-27 11:13:12

这看起来像是编译器错误,或者您需要 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文