0

我有一个带有以下预处理器指令的 .cpp 文件(我们称之为 check.cpp):

#ifdef CHECK
// code to execute goes here
#endif

check.cpp 文件用于两个不同的项目。(项目在同一个文件夹中并共享同一个 check.cpp 文件,该文件也在同一个文件夹中)

我希望一个项目执行此代码,但另一个项目不执行此代码。

所以最后,对于 ProjectA,check.cpp 将具有:

#ifdef CHECK
// This code WILL execute
#endif

对于 ProjectB,check.cpp 将具有:

#ifdef CHECK
// This code WILL NOT execute
#endif

是否可以使用预处理器指令,或者可能有更简单的方法?

我的想法是使用

#define CHECK 1

并将其放在其中一个项目中而不是另一个项目中,但 .cpp 文件需要包含 #define 才能工作,并且该文件是共享的...

有任何想法吗?

4

4 回答 4

2

我不确定您使用的是哪个编译器,但在 Visual Studio 中,在您要执行代码的项目中定义“CHECK”:

项目设置 > 配置属性 > C/C++ > 预处理器 > 预处理器定义

于 2013-02-26T17:44:37.697 回答
1

无论你做什么,你都需要一个决定点,你在哪里指示编译器要编译什么代码。

不同的开发环境提供了各种方法来将数据注入到这个决策点。它可以通过对不同项目具有不同值的环境变量。另一种方法(我会说一种更简洁的方法)是将代码分隔在 2 个不同的文件中,一个包含在第一个项目中,一个包含在第二个项目中。

于 2013-02-26T17:44:05.457 回答
0

我不认为这是可能的。

#ifdef CHECK
...
#endif

如果定义了 CHECK,将始终执行。不将封闭代码包含在项目中的唯一方法是取消定义该项目的 CHECK(如果已定义)。

#undef CHECK

在项目 B

于 2013-02-26T17:45:10.117 回答
0

如果您想使用#defines 来使用您的方法,我建议您采用以下方法:

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

在 ProjectA.cpp 中:

#define FOO
#include "header.h"

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

在 ProjectB.cpp 中

#undef FOO
#include "header.h"  
void b(int x) {
    BAR(x); // g(x)
}

这将调用两个版本的不同函数,但您的代码可以保留在同一个文件 common.cpp 中。因此,g(x)您可以运行特定于的代码,ProjectB.cpp并且f(x)可以运行特定于的代码ProjectA.cpp

希望我正确回答了这个问题。

于 2013-02-26T17:46:17.853 回答