2012-09-12 40 views
1

我使用VS2010 我有幾個頭一個項目,一個文件與main()函數。 爲了測試的目的,我希望能夠輕鬆實現另一個main()函數,該函數會實現與原始主體不同的東西。 有沒有簡單的方法來定義2「主」功能,並輕鬆地在它們之間切換? 最好的做法是編譯2個二進制文件,一個在main1()開始,另一個在main2(),或者它可以是需要重新編譯某些文件的解決方案,無所謂輕鬆切換不同的main()

+2

真的很重要什麼叫不同的功能?在同一個Visual C++ 2010項目中不能有多個'main'函數,但可以有條件地從'main'內部調用任何你喜歡的函數。 –

+0

這是一個愚蠢的想法。 –

回答

1

在連接選項你有入口點的名字。這樣,您就可以擁有MAIN1()和MAIN2():

http://msdn.microsoft.com/en-us/library/f9t8842e(v=vs.80).aspx

+0

不,這會跳過整個CRT初始化,並且圍繞着一個可怕的想法。 –

+0

這不是一個好主意。這可能導致具有相同名稱和不同功能的多個二進制文件。 –

+0

@CatPlusPlus AFAIK,這並沒有設置真正的入口點,而是由真正的main調用的入口點,所以CRT init不會被跳過 - 就像靜態變量構造函數不是。 –

1

「只有一個「你需要做的是創建一組主要調用條件或條件編譯語句的子函數。

0

一個應用程序只能有一個main。如果要運行兩件事情,你需要在主這樣做,通過:

  • 可執行文件運行的名稱(提示:第一argv的是可執行文件的名稱)
  • 進一步的命令行參數(program -thingone
  • 懶洋洋地對那些做某事的函數進行註釋。
1
#ifdef TESTING 
int main() { 
    /* whatever */ 
} 
#else 
int main() { 
    /* whatever else */ 
} 
#endif 
0

除了在連接指定不同的入口點或者有一個真正的main()調用要假裝取較低的水平功能是一個頂級函數,你可以爲每個你想要的main()添加一個項目。

這在VS中可能有些惱人,因爲單獨的項目並未默認設置爲共享源代碼。其他一些IDE可以更容易地使用共享集的不同子集構建不同的可執行文件(或其他構建產品)的源代碼,但我從未發現使用VS的默認設置很容易。

3

你幾乎總是使用一個單獨的編譯二進制文件和單獨的主文件。

首先,「用於測試目的」可能包括代碼,不應該成爲真正的二進制 - 如測試庫代碼。這需要第二個二進制文件。

其次,如果有什麼東西是應該被忽略,你還有任何人都可以提供一個參數或複製和重命名二進制相匹配的argv [0],這將使該功能的問題。

我知道這可能很難建築師項目文件創建單獨的真實測試程序,但在大多數情況下,你將有一個更好的結果。