gpt4 book ai didi

objective-c - 使用 define 控制每个源文件的宏编译

转载 作者:太空宇宙 更新时间:2023-11-03 23:31:31 27 4
gpt4 key购买 nike

是否可以通过在源文件中使用定义,使头文件在两个不同的源文件中以不同方式编译?

例如,如果我在两个源文件中包含一个 header ,如下所示:

标题.h:

#if FOO
#define BAR(x) f(x)
#else
#define BAR(x) g(x)
#endif

source1.cpp:

#define FOO 1
#include "header.h"

void a(int x) {
BAR(x); // f(x)?
}

source2.cpp

#include "header.h"

void b(int x) {
BAR(x); // g(x)?
}

这不应该编译成函数 a 执行 f 而函数 b 执行 g 吗?

我正在尝试在 XCode 和 Objective-C++ 中执行此操作。 a 和 b 都执行 g,就好像 source1.cpp 没有定义 FOO 一样。

最佳答案

您的宏定义 不正确 正确。 错误是它应该是 但是我更喜欢使用#ifdef 而不是#if

#ifdef FOO
#define BAR(x) f(x)
#else
#define BAR(x) g(x)
#endif

此外你不必给FOO一个值,你需要做的就是在source1.cpp#define

#define FOO
#include "header.h"

source2.cpp 中,我还将确保 FOO 未定义(作为任何其他包含的结转),方法是:

#ifdef FOO
#undef FOO
#endif
#include "header.h"

编辑

我有点快说宏是错误的。根据这个 SO 问题 What is the value of an undefined constant used in #if? (C++) #if 应该按照 OP 给出的方式工作,因为 FOO 的值在未定义时应该衰减到 0

但是我认为使用 #ifdef 可以提供更多关于实际需要的上下文。

因此我怀疑 FOO 的定义是在某个地方意外地偷偷溜进来的。

关于objective-c - 使用 define 控制每个源文件的宏编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14215675/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com