我有一个.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才能使用它并且该文件是共享的...
有什么想法吗?
答案 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
的代码
希望我能正确回答这个问题。