我想在Windows和Linux機器上的套件中添加測試函數。在Linux機器上,我想要添加真正的功能,並在Windows機器上我想要添加虛擬UnsupportedFunction,以便我可以在這兩種環境中具有相同數量的功能。在不同的環境中正確使用C虛擬函數替換
我有以下代碼
void UnsupportedFunction(struct1* test)
{
//dummy function in C
}
// following functions defined else where and gets added only if its linux box
#if ENV_LINUX
extern void linuxOnlyFunc1(struct1* test);
extern void linuxOnlyFunc2(struct1* test);
extern void linuxOnlyFunc3(struct1* test);
extern void linuxOnlyFunc4(struct1* test);
#endif
static struct1* addTest(params, TestFunction fnPtr) {
...
}
static void addTestToSuite (struct1* suite,
input devices,
TestFunction testFunction,
const char* testName,
const char* testDescription)
{
TestFunction fnPtr = UnsupportedFunction;
#if ENV_LINUX
fnPtr = linuxOnlyFunc1;
#endif
LinWB_Util_AddTest(params, fnPtr);
}
的問題是,因爲我有很多的測試,被添加到該套件,我必須做出一個醜陋的if-定義了所有條目。爲了擺脫這些,我必須抽象一個函數調用,但是,這些externs功能不存在於Windows環境,我最終得到編譯器錯誤或警告(視爲錯誤)。 如何以更好的方式設計這個?
歡迎來到平臺的世界「兼容性」。即使是大型項目,甚至是在應該兼容的平臺上共享的代碼,處理這些事情的最常見方式是使用(可能)大量預處理器條件編譯。 –