今日の一言
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]