2011-12-22 9 views
1
私は他の引数

のgetopt

私は彼らが次のオプションでaa.ccで実行したいと一緒にパラメータで-dを持つように簡単なプログラムを書いています

  • aa -d 123 param1 param2または
  • aa param1 param2 -d 123

私は次のようにコードを書かれている

/* sample */ 

    char *level: 
    while ((ch = getopt(argc, argv, "d:")) != EOF) { 
     switch(ch) { 
     case 'd': 
      level = optarg;  
      debug = TRUE; 
      break; 
     default: 
      usage(); 
      /*NOTREACHED*/ 
     } 
    } 

aa -d 123 param1 param2なく として与えられたとき aa param1 param2 -d 123として与えられたとき、それが正常に動作しています。

誰でも私たちがそれを達成する方法を提案できますか? (例えば-d 123など)

+0

最後のオプションが処理された後、 'getopt()'は 'EOF'ではなく' -1'を返すように文書化されています。 'getopt()'のPOSIX標準ヘッダは ''であり、 'EOF'を定義していないので、' 'ヘッダから' getopt() 'の定義を変更しました。 –

答えて

2

あなたがgetopt()のGNUバージョンを使用している場合を除き、オプションの引数は、非オプションの引数に先行しなければならない(例えばparam1param2など)。 (POSIX 'Utility Conventions'を参照してください。)

をおGNU getopt()を使用している場合は、(--引数を含めないまでけど)、それは引数リスト全体をスキャンします、非オプションの後に発見された処理オプションを、POSIXLY_CORRECT環境変数が設定されていない限り、 (その場合はもちろん、POSIX getopt()のように動作します)。

GNU getopt()を使用していない場合は、オプション以外のオプションを使用する前に暮らすか、GNU getopt()に切り替えてください。

+0

ありがとうございましたJonathan非常に便利です – AKS

+0

AKS、ようこそ、スタックオーバーフローへようこそ。しばらくして[質問の仕方]に関するFAQを読んでください(http://stackoverflow.com/faq#howtoask)。 SOに「ありがとうございます」と言っている主な方法は、あなたが評判を上げているときに投票し、回答を受け入れることです(回答を受け入れることで評判が少し向上します)。 –

関連する問題