나는 명령 줄 옵션을 구문 분석하는 내 C 프로그램에서 argp
을 사용하고 싶습니다.GNU의 argp는 어떻게에만 긴 이름의 옵션을 구문 분석하는 방법?
하나의 요구 사항은 짧은 이름 (예 : -f bar
)이 아니고 긴 이름 (예 : --foo=bar
) 만 필요하다는 것입니다.
내 접근 방식은 지금까지 짧은 이름을 표시하지 수 있도록 0
에 argp_option
구조체의 key
필드를 설정하는 것입니다.
자세한 내용은 the provided examples과 을 보았습니다 만, argp
에 주어진 파서 기능에서만 긴 이름이있는 옵션을 구문 분석 할 수있는 방법을 찾을 수 없습니다.
내가 알아 않은 것은 이론적으로, 파서에 내가
case ARGP_KEY_ARG:
printf("%s\n", arg);
긴 옵션의 값 (--foo=bar
호출 할 때, 예를 들어, bar
여기에 인쇄 될 것입니다)를 찾는 데 사용할 수 있다는 점이다. 그러나 실제로 어떤 옵션이 속하는지 간단하게 알려주지 않으므로 올바른 접근 방식이 아닌 것 같습니다. 실제 명령 행 인수 (옵션 값이 아님)도 표시됩니다.
은 내가 볼 필요가 위치에 대한 어떤 조언 감사 할 것입니다. 건배. "The GNU C Library: Argp Option Vectors — Specifying Options in an Argp Parser"에서
'짧은'옵션으로 음수 (예 :'-1')를 사용하고 스위치에서 처리 할 수 있습니다. – keltar
옵션의'key' 필드는 임의의'int' 값이 될 수 있습니다. 문서에서는'isascii (key)'가 true이면'key'는 짧은 옵션'-char' ('char'는 문자 코드'key'와 연관된 문자)입니다. 기술적으로,'isascii'는'0x00 <= key && key <0x80'을 보장하므로, 그 범위를 벗어난 어떤 int 값도 키에 사용할 수 있습니다. 이'key '는 연관된 긴 옵션 (예 :'--foo')의 값으로 계속 사용되기 때문에 어떤 키/단축 옵션과도 동일하게 처리 할 수 있습니다. BTW, 모든 옵션 키를 상수로'enum '에 담았습니다.'0x100'옵션이'switch'에서 무엇을 나타내는 지 궁금하지 않습니다 .-) –
@ChronoKitsune 그 대답은 狐이 될 수 있습니다. Btw, 왜'-opt'를 키로 사용하지 않는지 (짧은 옵션이 될지도 모르는 * 음수 * 값). 예 : 's'와'd '가 의미있는 짧은 옵션 인 경우 절대 값이> 0x80 인'-s'와'-d '를 사용하십시오. –