HOWTO · C++
C++ で getopt を使用して引数を処理する
この記事では、C++ で getopt()関数を使用して引数を処理する方法を示します。
この記事では、getopt() 関数を使用して、コマンドラインでコードに渡された引数を処理する方法を示します。このチュートリアルでは、特定の入力で特定のアクションを実行するためにコードを操作する方法についても説明します。
C++ で getopt() 関数を使用して引数を処理する
以下に示すコードがあるとします。
// File titled arg_test.cpp
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
int opt;
while ((opt = getopt(argc, argv, ":f:asd")) != -1) {
if (opt == 'a' || opt == 's' || opt == 'd') {
printf("Option Selected is: %c\n", opt);
} else if (opt == 'f') {
printf("Filename entered is: %s\n", optarg);
} else if (opt == ':') {
printf("Option requires a value \n");
} else if (opt == '?') {
printf("Unknown option: %c\n", optopt);
}
}
// optind is for the extra arguments that are not parsed by the program
for (; optind < argc; optind++) {
printf("Extra arguments, not parsed: %s\n", argv[optind]);
}
return 0;
}
getopt() 関数の構文は次のとおりです。
getopt(int argc, char *const argv[], const char *optstring)
argc は整数で、argv は文字配列です。optstring は文字のリストであり、それぞれが 1 文字の長さのオプションを表します。
入力内のすべての処理が完了すると、関数は -1 を返します。
getopt() 関数は ? を返します認識できない何かに遭遇したとき。さらに、この認識されないオプションは、外部変数 optopt に格納されます。
デフォルトでは、オプションに値が必要な場合、たとえば、この場合、オプション f には入力値が必要なので、getopt() は ? を返します。しかし、optstring の最初の文字にコロン (:) を置くことで、? の代わりに : を返すようになります。
この場合、a、s、または d の入力を入力すると、オプション自体が返され、f を使用すると、引数として指定されたファイル名が返されます。それ以外はすべて有効なオプションとは見なされません。
上記のコードを実行するには、ターミナルで同様のコマンドを使用できます。
gcc arg_test.cpp && ./a.out
もちろん、これを入力するだけでは、有用な出力は得られません。使用例と出力例を入力し、各コマンドの処理方法を説明します。
例として次のコマンドを入力すると、次のようになります。
gcc arg_test.cpp && ./a.out -f filename.txt -i -y -a -d testingstring not_an_option
出力として次のようになります。
Filename entered is: filename.txt
Unknown option: i
Unknown option: y
Option Selected is: a
Option Selected is: d
Extra arguments, not parsed: testingstring
Extra arguments, not parsed: not_an_option
オプション a と d が期待どおりに返されました。f フラグの後に指定されたファイル名も報告され、オプション i および y が ? に入りました。カテゴリであり、不明なコマンドとして認識されました。
ここでは、上記のシナリオに加えて、getopt() 関数の後に追加した最後のループが、関数によって処理されなかった残りの引数(testingstring および not_an_option)を処理していることがわかります)。