GLib을 사용하여 일부 명령 행 옵션을 구문 분석합니다. 문제는 이러한 옵션 중 두 개를 필수로 설정하여 사용자가 도움말을 생략하면 프로그램이 도움말 화면으로 종료되도록하려는 것입니다.GLib에서 명령 행 옵션을 필수로 만드는 방법은 무엇입니까?
내 코드는 다음과 같습니다
내가) 명령 줄 g_option_context_parse에 이러한 매개 변수 중 하나 또는 모두를 (생략 여전히 성공하고 문제가되는 값 (라인 또는 열)이 여전히있는 경우
static gint line = -1;
static gint column = -1;
static GOptionEntry options[] =
{
{"line", 'l', 0, G_OPTION_ARG_INT, &line, "The line", "L"},
{"column", 'c', 0, G_OPTION_ARG_INT, &column, "The column", "C"},
{NULL}
};
...
int main(int argc, char** argv)
{
GError *error = NULL;
GOptionContext *context;
context = g_option_context_new ("- test");
g_option_context_add_main_entries (context, options, NULL);
if (!g_option_context_parse(context, &argc, &argv, &error))
{
usage(error->message, context);
}
...
return 0;
}
- 1. 사용자가 명령 줄에서 두 옵션을 모두 전달하지 않으면 GLib이 구문 분석에 실패한다고 어떻게 말할 수 있습니까? 아마 나는 눈이 멀었지만 그 필드를 필수로 만들도록 GOptionEntry 데이터 구조에 넣을 수있는 플래그를 찾을 수 없었습니다.
물론 해당 변수 중 하나가 -1인지 확인할 수 있지만 사용자가 명령 줄에서이 값을 전달하면 값이 범위를 벗어날 경우 별도의 오류 메시지가 인쇄됩니다.
어서, 그냥 "옵션"이라는 단어가 의미하는 바를 생각해보십시오. "필수 옵션"은 모순입니다. 옵션은 선택 사항입니다. 이것을 합법적 개념 인 "필수 인수"와 혼합했을 수 있습니다. 파이썬의 키워드 인수처럼 일종의 "명명 된 인수"를 원할 수도 있습니다. 유일한 이점은보다 많은 입력을 위해 임의의 순서로 전달할 수 있다는 것입니다 (스크립트의 경우 더 자세한 표시는 가독성을위한 이점입니다). 어쨌든, 종속성이 임의로 복잡 할 수 있기 때문에 파싱 단계 이후에 유효성 검사 만하는 것이 좋습니다. 어쨌든 "필수 옵션"은 오류입니다. –