2014-10-29 49 views
2

下面#ifdef的用途是什麼?爲什麼它允許我在調試它的時候(主動解決方案配置=調試)而不是當活動解決方案配置=發佈時,或者當構建解決方案和活動解決方案配置=發佈時,通過我的程序?程序中main()之前#ifdef的用途

#ifdef RUN 
int main(int argc, char* argv[]) 
{ 
    Some functions 

} 
#endif 

我與別人的遺留代碼的工作,我知道我可以刪除它,它會表現得正常,但我想知道爲什麼以前的編碼器在第一時間在這裏放置在這些預處理指令。

+0

最有可能在Visual Studio配置管理器中存在一個預處理器指令,該指令在調試但未發佈的情況下定義了「RUN」,原因如下。檢查此答案以瞭解如何設置預處理器指令:http://support.microsoft.com/kb/4045897/visual-studio-incorrectly-marking-inactive-code-blocks-when-using-ifdef – amdn 2014-10-29 21:27:57

回答

2

回想一下,在鏈接的C程序中,只能有一個main()函數。

因此,如果這旨在用作代碼,則需要關閉主(在預編譯中將其刪除)。

如果是獨立運行,主要應在左邊。

它可用於文件的測試用例。它也可能成爲一個獨立的服務器,其中庫代碼基本上仍然作爲庫代碼運行,只能通過IPC而不是直接鏈接。

對我來說,這是不好的做法,反映了構建中的一個問題,C程序員比構建工程師更能勝任,他不知道如何正確分離組件。重構是必要的。

我會考慮取消之前如下:

  • 是他們測試的情況下? (如果是重構到正確的測試代碼)
  • 是否運行系統中的任何地方實際上打開?如果是的話,爲什麼;如果不是更安全以便刪除可能
  • 考慮#ifdef RUN#error作爲一種方式來打破構建,如果它驚訝你學習國旗有時被定義,或#ifndef反之亦然。注意我說「考慮」;請理解首先破解構建的含義。
+0

RUN實際上從未實際打開系統。這不是一個「測試」案例,而是代碼中其他地方存在的案例。 – traggatmot 2014-10-29 21:48:54

+1

@traggatmot可能值得盡你所能的去除代碼。源代碼控制與評論,對嗎? – djechlin 2014-10-29 21:59:36

1

例如,當只需要構建函數庫時,通常不需要任何main函數。 main函數用於測試某些東西。