Я использую getopt_long
на компьютере GNU/Linux. Initialize список опций как:Как определить, что требуемый аргумент параметра отсутствует?
static struct option long_options[] = {
{"mode", required_argument, 0, 9},
{0, 0, 0, 0}
};
Имейте следующую строку кода
c = getopt_long(argc, argv, "", long_options, index_ptr);
Когда я бегу моя программа с командой: '?'
prog --mode
Выше показано строка кода возвращает в с, но не «:», как ожидается, в соответствии с getopt(3)
человека страницы: «Ошибка и -1 возвращается являются же, как и для Getopt()»
Да, при использовании/разборе короткие варианты можно было бы написать в опции перечисляют что-то вроде «: m:», так что переменная c на отсутствующий аргумент будет содержать «:», а не «?», но что нужно делать, чтобы различать два случая (отсутствующий аргумент, недопустимый параметр) при разборе только длинные варианты?
Как можно различить недействительный вариант и параметр с отсутствующим требуемым аргументом?
Почему в 'long_options' массива вы использовали 9, как вал должен быть возвращен вместо символа«9»и почему' строка_опций/параметр shortopts' не содержащий «9:» ? (см. [Пример длинных опций анализа] (https://www.gnu.org/software/libc/manual/html_node/Getopt-Long-Option-Example.html#Getopt-Long-Option-Example)) –
@DavidBowling '.val' является' int', но в основном используется, когда указатель '.flag' не равен NULL. Поскольку '9' не может использоваться для определения аргумента shortcut, лучше использовать символ типа' 'm'' (для режима). –
Да, я прочитал раздел getopt [_long] справочника glibc, прежде чем задавать вопрос. Но не ясно, что следует вернуть в этом случае. –