2013-02-26 62 views
0

我有一個.cpp文件(可以稱之爲check.cpp)具有以下預處理程序指令:使用預處理程序指令的共享文件

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

check.cpp文件中的兩個不同的項目使用。 (該項目是在同一個文件夾,共享相同的check.cpp文件,該文件也是在同一文件夾中),我想一個項目執行該代碼

,但其他項目不執行此代碼。

所以在最後,爲項目A,check.cpp將有:

#ifdef CHECK 
// This code WILL execute 
#endif 

而對於項目B,check.cpp將有:

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

這有可能使用預處理器指令,或者有更簡單的方法?

我的想法是使用

#define CHECK 1 

並提出,在項目,而不是其他的一個,但.cpp文件需要包含#定義爲它工作,並且該文件共享。 ..

任何想法?

+0

您可以在編譯命令(例如「gcc -DCHECK」)中將'-DCHECK'添加到一個生成文件中,並將其保留在另一個生成文件的編譯命令中。 – paulsm4 2013-02-26 17:38:31

回答

2

我不知道你使用的編譯器,但在Visual Studio中,您要執行的代碼項目定義「檢查」:

項目設置>配置屬性> C/C++ >預處理>預處理定義

+0

是的,我正在使用VS2010旗艦版。 – ryrich 2013-02-26 19:03:03

1

不管你做什麼,你都需要在那裏你指示編譯器來編譯代碼是什麼決定的一個點。

不同的開發環境提供了多種方法將數據注入到這點決定的。它可以通過具有不同項目的不同值的環境變量。另一種方式(更清潔的方式,我會說)是將代碼分成兩個不同的文件,一個包含在第一個項目中,另一個包含在第二個文件中。

+0

我同意。分離成2個不同的文件更清潔,但不幸的是,在這個時候,我必須在我的應用程序中共享文件:( – ryrich 2013-02-26 19:04:46

0

我不認爲這是可能的。

#ifdef CHECK 
... 
#endif 

如果定義了CHECK,將總是執行。在項目中不包含附帶代碼的唯一方法是,如果該項目已定義,則爲該項目取消定義CHECK。

#undef CHECK 
B工程

0

如果你想使用的#define用你的方法,我建議以下方法:

#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.cppf(x)你可以運行特定的代碼ProjectA.cpp

希望我回答了這個問題的權利。