C/Unix에 대한 인수 구문 분석 도우미
다음 사항을 알고 있습니다.
사용하거나 들어보지 못한 것이 더 많을 것입니다. 빠른 구글 검색을 통해 Gopt, argtable 및 Optlist가 표시됩니다.
저는 개인적으로.argp
가장 좋고, 그리고 내가 쓴 모든 프로그램들을 사용합니다.getopt
/getopt_long
(특정 복잡도 기준선을 기준으로) 사용하도록 변환되었습니다.argp
보다 광범위하게 사용할 수 있습니다.popt
보다 더 강력한getopt_long
문서화가 잘 되어 있고, 모든 GNU 스타일의 규약과 일치하며, 매우 유연합니다.단점으로는, 그것은 가장 사용하기 쉬운 것과는 거리가 멀고, 그것을 지원하는 코드는 꽤 장황합니다(C의 많은 것들이 그러하듯이).
무엇을 사용하고 그 이유는 무엇입니까?
네, 저는 C++보다는 C를 의미합니다.C++ 파서는 많이 있지만, 저는 C++을 사용하지 않습니다.
존 밀리킨은 다음과 같이 언급합니다.popt
더 이상 유지 관리되지 않습니다.Gnome의 마이그레이션 노력에도 불구하고 AbiWord, rpm, rsync, samba 등 많은 프로그램이 여전히 사용하고 있기 때문에 나열합니다.하지만 저는 지금 Glib의 주장 파서에 대한 링크도 추가했습니다.
C++ 인수 구문 분석에 대한 내용은 C++에 대한 매개 변수 구문 분석 라이브러리란? 항목을 참조하십시오.
GNU는 옵션 데이터 구조를 위한 코드를 생성하는 gengetopt와getopt_long
명령행을 구문 분석하고 구조를 채우는 코드.그것은 꽤 배우기 쉽고 잘 작동합니다.
추가적으로 코드 주변에 옵션 구조를 전달하고 원하는 경우 글로벌 스토리지를 사용하지 않을 수 있습니다.
GNU 스타일 시맨틱(분명히)을 제공하며, 사용자의 빌드 환경이 확실하지 않을 경우 프로젝트에 배포할 수 있을 정도로 충분히 작습니다.
속담에 있듯이, "표준이 더 나은 것보다 더 나은 것"입니다.그래서 저는 항상 getopt_long()과 GNOME/글리비가 아닌 모든 것과 gliby를 사용합니다.
getopt_long()과 관련하여 누락된 기능이 많음에도 불구하고 저는 항상 Python 애플리케이션에서 optparse를 사용하지만 그것이 Python 표준입니다.
같은 것을 찾고 있었기 때문에, 저는 이 오래된 주제의 답을 읽었습니다.마지막으로 C++에 대한 어떤 매개 변수 파서 라이브러리가 있습니까?에 언급된 드롭을 선택했습니다.사실은 C에서 구현되어 있기 때문에 여기서도 언급할 가치가 있다고 생각합니다.저는 C 구현을 마무리하는 C++ 도우미를 사용하지 않았습니다.
드롭에 대한 흥미로운 사실:
- 라이트급
- 표준 립에만 의존함
- 가파른 학습 곡선 없음
- 기본 Arg 구문 분석 및 몇 가지 강력한 기능에 충분합니다.
- 확장이 용이함
- 무제한 라이센스(zlib-ish)
하지만 그것은 제한적입니다.예를 들어, 저는 매개변수 구문 사양을 약간 수정해야 했습니다. 바로 이 경우에는 허용 가능했지만, 물론 때때로 사양이 돌에 새겨지기도 합니다.
따라서 빠른 프로토타이핑, 툴 개발 및 사내 프로젝트를 위해서는 최소한 드롭을 권장합니다.
popt
오랫동안 버려졌습니다. 인수 구문 분석이 에 병합되었습니다.glib
3년 전 버전 2.6 이후.
사용합니다glib
의 포트인 파파의썬트포이의는또서▁'▁of트.getopt
.
저도 getopt를 별로 좋아하지 않아요. (비록 꽤 표준적이긴 합니다.제가 만든 한 가지 해결책은 argopt() 함수입니다.C와 호환되며 플래그가 설정되어 있는지 여부와 값이 있는 읽기 옵션을 테스트하는 데 사용할 수 있습니다.긴 옵션(예: 도움말)에 대해 유사한 기능을 작성하는 것은 그리 어렵지 않지만 짧은 옵션(예: -h)만 지원합니다.예를 참조하십시오.
int main(int argc, char **argv){
if(argopt(argc, argv, 'p')) printf("-p is set\n");
if(argopt(argc, argv, 'q')) printf("-q is set\n");
const char *f = argopt(argc, argv, 'f');
if(f) printf("-f is %s\n",f);
return 0;
}
명령줄의 예:
$./main -f input.txt -rq
-q is set
-f is input.txt
고지 사항:짧고, C 호환, 사용하기 쉽고, 의존성이 없는 것을 목표로 재미로 이 기능을 만들었습니다.여기 있습니다.
const char* argopt(int argc, const char *const *argv, char key){
for(int i=1; i<argc; i++){
const char *c = argv[i];
if(*c!='-') continue;
while(*++c) if(*c==key) return argv[(i+1)%argc];
}
return 0;
}
저는 플레인 C로 작성된 명령줄 매개 변수 구문 분석 라이브러리인 libparamset을 개발하고 사용해 왔습니다.다음을 제공합니다.
- 교차 플랫폼 기능(Linux, OS X, Windows).
- 각 매개 변수가 다르게 작동할 수 있는 구성 가능한 파서(강력하고 유연한 기능).
- 오타, 알 수 없는 매개 변수 또는 잘못된 매개 변수에 대한 메시지가 자동으로 생성되었습니다.
- 명령줄 사용자 인터페이스를 설계하기 위한 추가 기능.
- 좋은 문서입니다.
저는 TCLAP 라이브러리가 매우 유연하고 사용하기 쉽기 때문에 매우 좋아합니다.또한 완전히 템플리트 기반이므로 헤더 전용 라이브러리입니다.
내 실수: 당신은 C와 내가 C++ 라이브러리를 게시했다고 말했습니다.
언급URL : https://stackoverflow.com/questions/189972/argument-parsing-helpers-for-c-unix
'code' 카테고리의 다른 글
암호로 보호된 Excel 파일에서 Panda DataFrame까지 (0) | 2023.06.07 |
---|---|
WordPress의 사용자 지정 게시물 유형에 대한 영구 링크에 특정 범주만 표시 (0) | 2023.06.07 |
유니언 유형을 유형 스크립트에서 열거형으로 변환하는 방법은 무엇입니까? (0) | 2023.06.07 |
유형 스크립트에서 최소/최대 길이의 문자열 유형 선언 (0) | 2023.06.07 |
MariaDB 이름 길이 가져오기 오류 트리거 (0) | 2023.06.07 |