将预处理程序指令用于共享文件

时间:2013-02-26 17:35:04

标签: c++ preprocessor-directive

我有一个.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 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

无论你做什么,你都需要一个决定点来指导编译器编译什么代码。

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

答案 2 :(得分:0)

我认为不可能。

#ifdef CHECK
...
#endif

如果定义了CHECK,将始终执行。在项目中不包含所附代码的唯一方法是,如果定义了该项目,则取消定义CHECK。

#undef CHECK
项目B中的

答案 3 :(得分: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的代码

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