2014-04-30 20 views
3

在我的C++項目中,我需要使用「測試模式」。將預處理器指令與功能代碼混合是一種不好的做法嗎?

通常有些進程需要由其他進程產生。由於調試由另一個應用程序啓動的應用程序有點棘手,我需要這種基本上分配控制檯的測試模式,模擬創建隨機數據的其他進程的存在,因此不需要使用IPC設施。

我開始使用預處理指令代碼,如:

int APIENTRY _tWinMain(...) { 
#ifdef TEST_MODE_ON 
    AllocConsole(); 
    ... 
#endif 
... 
#ifdef TEST_MODE_ON 
    FreeConsole(); 
    ... 
#endif 
} 

,但我認爲這不是從視代碼的可讀性點的最好辦法。這是一種不好的做法嗎? (爲什麼?)還有其他更好的方法嗎?謝謝!

+1

請不要使用TCHAR及其同類,除非您正在移植古老的Windows程序。 – Deduplicator

+0

是的,我在Windows 8上移植了一些非常舊的代碼,但我沒有看到與我的問題的鏈接。順便說一句,爲什麼我應該避免使用tchar? – Chaplin89

+0

你看過''嗎? – Deduplicator

回答

5

這不是一個壞習慣,只會讓代碼更難讀。我會去的東西,如一個方法調用者的宏,要看TEST_MODE_ON求別的東西:

#include <stdio.h> 

#ifdef TEST_MODE_ON 
#define DEBUG_CALL(x) x; 
#else 
#define DEBUG_CALL(x) 
#endif 

int main(int argc, char** argv) 
{ 
    DEBUG_CALL(printf("Hello")); 
} 

(是的,我知道這是醜陋和不安全的,但仍然有效)

,當然你的編譯過程會花費關心定義TEST_MODE_ON

+0

這看起來不錯。 – Chaplin89

0

這是解決這類問題的常用方法。這是一個位模式下可讀寫:

#ifdef TEST_MODE 
// ... 
#endif 

TEST_MODE被定義推斷,這是ON

相關問題