トップ «前の日記(2010/06/08(Tue)) 最新 次の日記(2010/06/15(Tue))»
【ソース+水=麦茶色の何か】

半期 四半期 全カテゴリ

今日の一言


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

うむ、面倒!