今日の一言
2010/06/10(Thu) エンジェルウィスパー [長年日記] 10:00現在 24℃
_ [C++][Debian][FC][Ubuntu][Linux][研究関係][雑記]引数の処理にgetoptを使ってみる
大体こんな感じ。
#include <stdio.h> #include <unistd.h> /* getoptに必要 */ int main(int argc, char **argv) { const char *flags = "r:m:c:d:t:plgv"; int swt; int r,m,c,d,t; printf("command: %s",argv[0]); while ((swt = getopt(argc, argv, flags)) != EOF) { switch (swt) { case 'r': r = strtol(optarg, NULL, 0); printf(" -%c %d",swt, r); break; case 'm': m = strtol(optarg, NULL, 0); printf(" -%c %d",swt, m); break; case 'c': c = strtol(optarg, NULL, 0); printf(" -%c %d",swt, c); break; case 'd': d = strtol(optarg, NULL, 0); printf(" -%c %d",swt, d); break; case 't': t = strtol(optarg, NULL, 0); printf(" -%c %d",swt, t); break; case 'p': printf(" -%c",swt); break; case 'l': printf(" -%c",swt); break; case 'g': printf(" -%c",swt); break; case 'v': printf(" -%c",swt); break; // case ':': /* 値を取る引数に値がなかった場合 */ // printf(" -%c needs value\n",swt); // break; // case '?': /* getoptの引数で指定されなかったオプションを受け取った場合 */ // printf("unknown option\n",swt); // break; } } printf("\n"); return 0; }
便利・・・なのかな。
正直、自分で書くのと、そんなにコードの行数は変わらない気もする。
まあ、覚えておいて損はないだろう。
_ [C++][Debian][FC][Ubuntu][Linux][研究関係][雑記]引数の処理にgetoptを使ってみる(補足):引数で負の数を渡したい場合
例えば、
実行ファイル 引数1(int) 引数2(int)
というような関数を作った場合、
./a.out -1 2
のように書くと、「-1」が、1というオプションと判断されてしまう。
そのため、こちら(http://www.am.sanken.osaka-u.ac.jp/~mukaigaw/misc/getopt.html)で紹介されているように、オプションの最後を表す「--」をつけて、 "--"以降はオプションでないと宣言する必要がある。
./a.out -- -1 2
うむ、面倒!
[TrackBack URL: http://akihiro-i.net/~akihiro-i/diary/tb.rb/20100610]