我有一個Visual Studio C++項目。的在Visual Studio中多次運行C++項目main()?
int main(int argc, char** argv)
爲debugging options
,然後如果我想只運行一次,我可以簡單地手動輸入參數點擊調試。
不過現在,我希望多次用不同參數一次運行。例如我希望像這樣運行:
for(i=0; i<10; i++)
{
main(i);
}
我該如何使用Visual Studio做到這一點?
我有一個Visual Studio C++項目。的在Visual Studio中多次運行C++項目main()?
int main(int argc, char** argv)
爲debugging options
,然後如果我想只運行一次,我可以簡單地手動輸入參數點擊調試。
不過現在,我希望多次用不同參數一次運行。例如我希望像這樣運行:
for(i=0; i<10; i++)
{
main(i);
}
我該如何使用Visual Studio做到這一點?
我不認爲在技術上合法(按標準)致電main
。即使它是,你會通過錯誤的參數(argc == 1
和argv == ${DEITY}_ONLY_KNOWS
)。
這是我可能用cmd腳本解決的一個問題。只要確保你的程序進行編譯,然後運行是這樣的:在我的情況
@echo off
cd \path\to\debug\dir
rem this bit can be as complex as cmd.exe allows:
for /l %%a in (0,1,50) do (
for /l %%b in (0,1,10) do (
echo data.txt result.txt %%a %%b
)
)
這將運行一個命令(echo
所以你可以看到它的工作,但你應該替換爲您的實際可執行文件的名稱,並修改
: : : : : : : : : :
data.txt result.txt 49 7
data.txt result.txt 49 8
data.txt result.txt 49 9
data.txt result.txt 49 10
data.txt result.txt 50 0
data.txt result.txt 50 1
data.txt result.txt 50 2
data.txt result.txt 50 3
data.txt result.txt 50 4
data.txt result.txt 50 5
data.txt result.txt 50 6
data.txt result.txt 50 7
data.txt result.txt 50 8
data.txt result.txt 50 9
data.txt result.txt 50 10
有:cd命令與固定在第一兩個參數,最後兩個運行0-50和0-10,它的輸出的完成選擇適當的目錄)561倍(51×11)可能是一種讓VS自動執行此操作的方法,作爲構建/運行序列的一部分,但我不知道任何(我傾向於在大多數時間選擇最簡單的解決方案)。
你可以,當然,重構你的代碼,讓你重新命名main
到別的東西,然後有一個過濾器main
如下:
int main (int argc, char *argv[]) {
// Do this normally:
return worker (argc, argv);
// Or do this for debugging:
// int stat = 0;
// for (int i = 0; i < 10; i++) {
// // construct argv-lookalike based on i.
// stat = worker (myargc, myargv);
// if (stat != 0) break;
// }
// return stat;
然而,ARGV陣列的結構並不因爲必須遵循與標準中規定的相同規則,特別是argc
和argv
必須同意,argv
必須有一個字符指針數組(比argc
指示的多一個),以便每個參數都是C風格的字符串,argv[0]
必須表示程序名稱,argv[argc]
必須爲NULL,依此類推。
這可能是最簡單的使用cmd
腳本解決方案,並讓啓動代碼負責所有參數準備工作。
在C++中,在程序(C++ 11§3.6.1/ 3)中調用main
是非法的。但是,任何在main
內完成的工作都可以通過其他功能輕鬆完成。
int main(int argc, char** argv) {
foo(argc, argv);
}
int foo(int argc, char** argv) {
// do something
}
在這一點上,歡迎隨時爲你希望你的程序(或Visual Studio調試器)中調用foo(...)
多次。
比方說,你有這樣的假設方案:
#include <iostream>
#include <cstdlib>
using namespace std;
int main(int argc, char* argv[])
{
if(argc != 2)
{
cerr << "bad input" << endl;
exit(1);
}
auto arg = atoi(argv[1]);
cout << (2*arg) << endl;
}
你可以使用一個批處理腳本。將以下內容保存爲test.bat
與程序可執行文件所在的目錄相同。請在命令提示符下help
或專門help for
有關批處理文件的詳細信息命令:
@echo off
for /L %%i in (0,1,9) do prog.exe %%i
輸出:
0
2
4
6
8
10
12
14
16
18
或者你可以重構主循環和調用一個函數:
#include <iostream>
using namespace std;
void func(int arg)
{
cout << (2*arg) << endl;
}
int main()
{
for(auto i = 0; i < 10; ++i)
func(i);
}
輸出:
0
2
4
6
8
10
12
14
16
18
感謝您的分步解決方案。 1.在項目文件夾內我沒有任何東西。我擁有的是Microsoft Visual Studio Solution和VC++ Project。我可以做什麼? 2. main()的參數輸入如下所示:http://pastie.org/8382923如何編寫我的批處理文件?謝謝!真的是C++的新手。 :) –
生成項目後,'.exe'通常位於解決方案旁邊的Debug或Release目錄中。 –
你可能會打開VS的多個實例,並在每個實例中運行代碼,雖然有點混亂。 –
非常感謝!我該如何編寫這個特定的main()的cmd腳本? pastie.org/8382923說我的arg0,arg1總是data.txt和result.txt。我的arg2循環從0-50和我的arg3循環從0-10?真的是C++的新手,從來沒有聽說過cmd腳本。謝謝 –
@ perfectionm1ng,已經更新了'cmd'文件樣本以顯示這樣做的一種方式。 – paxdiablo