を呼び出すことは技術的に(標準に従って)合法であるとは思いません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
私の場合は動作していることがわかりますが、それを実際の実行可能ファイル名に置き換え、cdコマンドを変更して適切なディレクトリを選択する必要があります)最初の2つの引数を固定して561回(51 x 11)最後の 2 つは 0-50 と 0-10 を実行しており、その出力は次のように終了します。
: : : : : : : : : :
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
ビルド/実行シーケンスの一部として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;
argc
ただし、argv-array の構築は簡単ではありません。これは、標準で規定されているのと同じ規則に従うargv
必要argv
があるargc
ためです。引数は C スタイルの文字列でargv[0]
、プログラム名を表すargv[argc]
必要があり、NULL である必要があります。
cmd
スクリプト ソリューションを使用して、スタートアップ コードにすべての引数の準備を任せるのがおそらく最も簡単です。