2011-12-22 2 views
1

Я пишу простую программу, чтобы иметь -d с параметром наряду с другими аргументамиGetopt аргументов командной строки C++ с параметрами

Я хочу, чтобы работать с aa.cc со следующими параметрами

  • 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.

Может кто-нибудь предложить нам, как мы можем это достичь?

+0

Обратите внимание, что 'getopt()' документируется для возврата '-1', а не' EOF' после обработки последней опции. Стандартным заголовком POSIX для 'getopt()' является '' и это не определяет 'EOF', поэтому определение' getopt() 'было изменено (довольно давно назад), чтобы отделить его от заголовка' ' , –

ответ

2

Если вы не используете версию ГНУ getopt() опционных аргументы (например, -d 123) должны предшествовать непараметрические аргументы (например, param1 и param2). (См POSIX 'Utility Conventions'.)

Если вы используете GNU getopt(), он будет сканировать весь список аргументов (до, но не включая -- аргумента), параметры обработки, найденные после не-опций, если переменная POSIXLY_CORRECT среды не установлен (в этом случае он ведет себя как POSIX getopt(), конечно).

Если вы не используете GNU getopt(), вам нужно жить с опциями перед не-опциями или переключиться на GNU getopt() или написать свой собственный.

+0

Спасибо Jonathan Это очень полезно – AKS

+0

Добро пожаловать, AKS, и добро пожаловать в Stack Overflow. Пожалуйста, найдите минутку, чтобы прочитать FAQ о [Как задавать вопросы] (http://stackoverflow.com/faq#howtoask). Основной способ сказать «Спасибо» на SO - это голосование (когда у вас есть репутация) и принятие ответов (что также дает вам небольшое увеличение репутации для принятия ответа). –

Смежные вопросы