結局、C++なんでargc、argvなんかを直接見てもいいんだろうが、Qtでは、コマンドライン引数のオプションを解析してくれるクラスがあるんでそれを使ってみる。

試しに作ってみたソースをあげておく。説明はソース中のコメントで行っているので参照してくれ。

main.cpp

#include <QCoreApplication>
#include <QCommandLineParser>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    // アプリの名前やバージョンを設定(--versionで表示される)
    QCoreApplication::setApplicationName("Test Command Line");
    QCoreApplication::setApplicationVersion("1.0");

    // コマンドライン引数を表示する。
    qDebug() << "## argmuments";
    for(QString arg : QCoreApplication::arguments()) {
        qDebug() << arg;
    }
    qDebug() << "###";

    QCommandLineParser parser;
    // アプリの説明
    parser.setApplicationDescription("Analysis of command line arguments test");
    // -h、--help、-?(Windowsのみかな?)でヘルプを表示するように設定
    parser.addHelpOption();
    // -v、--versionでバージョンを表示するように設定
    parser.addVersionOption();
    // ヘルプ表示用に引数の説明などを追加
    parser.addPositionalArgument("param1", "Parameter 1.");
    parser.addPositionalArgument("param2", "Parameter 2.");

    // -aオプションを追加
    QCommandLineOption optionA("a",         // オプション
                               "Option A."   // ヘルプ用オプションの説明
                               );
    parser.addOption(optionA);
    // -b、--bbbb(長い名前のオプション)オプションを追加
    QCommandLineOption optionB({"b", "bbbb"}, "Option B.");
    parser.addOption(optionB);

    // -c、--ccccオプション(値を取るオプション)を追加
    // -c=value、--cccc=value、-c value、-ccc valueのように指定する
    QCommandLineOption optionC({"c", "cccc"}, "Option C.",
                               "valueName",     // 値の名称
                               "default"        // 値のデフォルト値
                               );
    parser.addOption(optionC);

    // コマンドライン引数の解析と実行(--helpや--versionは実行される)
    parser.process(QCoreApplication::arguments());

    // オプション以外の引数を表示する
    qDebug() << "## params";
    for(QString arg : parser.positionalArguments()) {
        qDebug() << arg;
    }

    // オプションの設定状態を表示
    if(parser.isSet(optionA)) {
        qDebug() << "-a set";
    } else {
        qDebug() << "-a unset";
    }
    if(parser.isSet(optionB)) {
        qDebug() << "-b set";
    } else {
        qDebug() << "-b unset";
    }

    qDebug() << "-c " << parser.value(optionC);

    return 0;
}

addHelpOption、addVersionOptionを設定しているので-h、-vでそれぞれヘルプ、バージョンが表示される。こんな感じに表示される。

-hでヘルプを表示

> CommandLine.exe -h
## argmuments
"CommandLine.exe"
"-h"
###
Usage: CommandLine.exe [options] param1 param2
Analysis of command line arguments test

Options:
  -?, -h, --help          Displays this help.
  -v, --version           Displays version information.
  -a                      Option A.
  -b, --bbbb              Option B.
  -c, --cccc <valueName>  Option C.

Arguments:
  param1                  Parameter 1.
  param2                  Parameter 2.

-vでバージョンを表示

> CommandLine.exe -v
## argmuments
"CommandLine.exe"
"-v"
###
Test Command Line 1.0

次に

> CommandLine.exe -b hoge1 hoge2

を実行すると、次のように表示される。

## argmuments
"CommandLine.exe"
"-b"
"hoge1"
"hoge2"
###
## params
"hoge1"
"hoge2"
## option
-a unset
-b set
-c  "default"