・一番左に書いた有効なオプションだけで判断し、一番目が無効で二番目以降に有効なオプションがあってもオプションを無視する場合
「sample.exe aaa /test=2 /test=1」では、何もしない。
int main(int argc, char**argv)
{
if (strcmp("/test=1",argv[1]) == 0) a();
else if (strcmp("/test=2",argv[1]) == 0) b();
else if (strcmp("/test=3",argv[1]) == 0) c();
}
----------------------------
・無効なオプションは無視し、複数のオプションを同時に指定した場合、一番右に書いたのだけ有効にする場合
「sample.exe aaa /test=2 /test=1」では、a()だけを実行する。
int main(int argc, char**argv)
{
int fn = 0;
int i;
for (i = 1;i < argc;i++) {
if (strcmp("/test=1",argv[i]) == 0) fn = 1;
else if (strcmp("/test=2",argv[i]) == 0) fn = 2;
else if (strcmp("/test=3",argv[i]) == 0) fn = 3;
}
switch (fn) {
case 1: a(); break;
case 2: b(); break;
case 3: c(); break;
default: break;
}
}
----------------------------
・無効なオプションは無視し、複数のオプションを同時に指定した場合、一番左に書いたのだけ有効にする場合
「sample.exe aaa /test=2 /test=1」では、b()だけを実行する。
int main(int argc, char**argv)
{
int fn = 0;
int i;
for (i = 1;i < argc;i++) {
if (strcmp("/test=1",argv[i]) == 0) { fn = 1; break; }
else if (strcmp("/test=2",argv[i]) == 0) { fn = 2; break; }
else if (strcmp("/test=3",argv[i]) == 0) { fn = 3; break; }
}
switch (fn) {
case 1: a(); break;
case 2: b(); break;
case 3: c(); break;
default: break;
}
}
----------------------------
・無効なオプションは無視し、複数のオプションを同時に指定した場合、すべて有効にする場合で、オプションの順番がどうでも実行順序を変えない場合
「sample.exe aaa /test=2 /test=1」では、a()を実行してからb()を実行する。
int main(int argc, char**argv)
{
int fn1 = 0;
int fn2 = 0;
int fn3 = 0;
int i;
for (i = 1;i < argc;i++) {
if (strcmp("/test=1",argv[i]) == 0) fn1 = 1;
else if (strcmp("/test=2",argv[i]) == 0) fn2 = 1;
else if (strcmp("/test=3",argv[i]) == 0) fn3 = 1;
}
if (fn1 != 0) a();
if (fn2 != 0) b();
if (fn3 != 0) c();
}
----------------------------
・無効なオプションは無視し、複数のオプションを同時に指定した場合、すべて有効にする場合で、オプションの順番に従って実行順序が変わる場合
「sample.exe aaa /test=2 /test=1」では、b()を実行してからa()を実行する。
int main(int argc, char**argv)
{
int i;
for (i = 1;i < argc;i++) {
if (strcmp("/test=1",argv[i]) == 0) a();
else if (strcmp("/test=2",argv[i]) == 0) b();
else if (strcmp("/test=3",argv[i]) == 0) c();
}
}
----------------------------
このように「プログラムの組み方が違うと、オプションの指定方法が同じでも、実行するしないの違い、実行する場合でも実行の順番が違う」ので、色々と試してみると良い。