2012-11-03 3 views
0

나는 명령 줄 인수를 구문 분석하는 C++ 프로그램에서 getopt에를 사용하는 것을 시도하고있다. 인수가 -d XXX 있으며, XXX와 -s -? - - 캡처하는 데 문제가 있습니까? 인자로 표준 사용법 메시지를 출력하고 싶습니다.getopt - 캡처 '?'

while ((c = getopt (argc, argv, "?d:s:")) != -1) { 
    switch (c) { 
     case 'd': 
      ...do stuff 
      break; 
     case 's': 
     ... do stuff 
      break; 
     case '?': 
      // From example on GNU page, seems to capture -d, -s when no args provided. 
      // Gets here when -d or -s provided, but no arguments for these options. 
     default: 
      // shut down 
} 

시도해 볼 때 '-?' 옵션을 선택하십시오. '트릭을 잡는 특별한 방법이 있습니까?' 그 자체로? getopt에 올바른 패턴을 제공 했습니까 (즉, '? d : s :') 현재 C는 '?'로 설정됩니다. 유효하지 않은 옵션이 제공 될 때마다 '?' 명령 행에 제공되지 않습니다.

감사합니다.

+1

'getopt '가'?'를 특별한 값으로 사용한다는 사실은 도움을 표시하기 위해 * 사용하지 말아야한다는 것을 당신에게 공짜로 준다. 그것이'-h'와'--help'가있는 곳입니다. 그것은 당신 자신의 일을하는 대신에 이러한 관행을 고수해야합니다. –

답변

5

getopt는 누락 된 옵션 값 또는 알 수없는 옵션을 의미하는 특수 값으로 '?'을 사용합니다. 그래서 내가 처리 할 수 ​​getopt을 사용할 수있는 방법이 있다고 생각하지 않는다 '-'.

나는 도움말 메시지 '-h'추천 할 것입니다. 일반적인 관습입니다.

+1

감사합니다 존 - gotchya? -h 또는 --help를 사용하는 것이 가장 좋습니다. – Pete855217