Мне нравится getopt для анализа параметров из аргумента argv
. К сожалению, я не могу сделать getopt
параметры разбора между неопциями или в конце argv
. Пример программы:
#include <stdio.h>
#include <unistd.h>
int o_help = 0;
int main(int argc, char *argv[]) {
int opt, i;
while ((opt = getopt(argc, argv, "h")) != -1) {
switch (opt) {
case 'h':
o_help = 1;
break;
default:
return -1;
}
}
printf("o_help=%d\n", o_help);
for (i = 1; i < argc; i++) {
printf("%s ", argv[i]);
}
printf("\n");
return 0;
}
Запустив программу в альпийском контейнере на MacOS Mojave, я получаю следующие выходные данные:
$ gcc prog.c
$ ./a.out hello -h world
o_help=0
hello -h world
$ ./a.out -h hello world
o_help=1
-h hello world
Официальная getopt
Состояния man-страницы:
По умолчанию getopt () переставляет содержимое argv при сканировании, так что в конечном итоге все неопции заканчиваются.
Поскольку я не указал иное, я ожидаю поведение по умолчанию: 1. анализировать опцию -h
и 2. переставлять argv
, чтобы неопции были в конце массива. К сожалению, вызов программы типа ./a.out hello -h world
не выполняет ни разбора -h
, ни перестановки массива. Помощь будет принята с благодарностью.