как использовать длинные опции через getopt_long:
например вот так:
--wide-option
У меня есть --wide и -w.
А на --wide-option выдает следующую ошибку:
"неизвестный вариант"
int main(int argc, char **argv)
{
struct option opts[] =
{
{"wide", 1, 0, 'w'},
{
0, 0, 0, 0
}
};
int option_val = 0;
int counter = 10;
int opindex = 0;
while ((option_val = getopt_long(argc, argv, "w:", opts, &opindex)) != -1)
{
switch (option_val)
{
case 'w':
if (optarg != NULL)
counter = atoi(optarg);
for (int i = 0; i < counter; i++)
printf("Hello world\n");
break;
default:
return 0;
}
}
return 0;
}
У вас есть вариант --wide; у вас нет выбора --wide-option. Если я скомпилирую ваш код в optiontest, я смогу запустить ./optiontest --wide foo без ошибок.
cat -b имя файла (--число-непустое). приведенный выше код является тестовым случаем
Ну так добавьте {"wide-option", 1, 0, ...},, если хотите иметь --wide-option.
В чем именно заключается ваш вопрос?





Если вы посмотрите на исходный код cat (здесь), вы увидите, что --number и --number-nonblank — это два разных варианта (-b и -n). (около строки 555).
Если вы хотите сделать то же самое, вы можете сделать это следующим образом:
#include <getopt.h>
#include <stdio.h>
int main(int argc, char **argv)
{
struct option opts[] =
{
{"wide", 1, 0, 'w'},
{"wide-option", 0, 0, 'o'}, /* declare long opt here */
{
0, 0, 0, 0
}
};
int option_val = 0;
int counter = 10;
int opindex = 0;
while ((option_val = getopt_long(argc, argv, "w:o", opts, &opindex)) != -1) /* the case here (I arbitrary choose 'o') */
{
switch (option_val)
{
case 'w':
if (optarg != NULL)
counter = atoi(optarg);
printf("option --wide %d found!\n", counter);
for (int i = 0; i < counter; i++)
printf("Hello world\n");
break;
case 'o': /* and take the case into account */
printf("option --wide-option found!\n");
break;
default:
return 0;
}
}
return 0;
}
в этом случае я хочу реализовать «--number-nonblank». в этом случае я хочу реализовать -b и --number-nonblank
@Kuttubek Ваши вопросы неясны, довольно сложно понять, чего именно вы хотите достичь. Если вы хотите реализовать в соответствии с вашим последним комментарием, добавьте это в структуру опции: {"number-nonblank", no_argument, NULL, 'b'},, тогда программа примет --number-nonblank (и -b, что будет короткой альтернативой --number-nonblank, но даст тот же результат).
почему была включена библиотека stddef.h?
Какова ваша точная командная строка?