В настоящее время я пишу простую программу на C, которая может принимать числовые аргументы командной строки.Но я также хочу, чтобы он имел параметры командной строки.Я заметил несоответствие между различными операционными системами, если один из числовых аргументов отрицателен (т.е. getopt иногда делает / иногда не путает -ve как аргумент).Например:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char* argv[])
{
char ch;
while ((ch = getopt(argc, argv, "d")) != -1) {
switch (ch) {
case 'd':
/* Dummy option */
break;
default:
printf("Unknown option: %c\n", ch);
return 1;
}
}
argc -= optind;
argv += optind - 1;
if (argc < 2) {
fprintf(stderr, "Not enough arguments\n");
return 1;
}
float f = atof(argv[1]);
printf("f is %f\n", f);
float g = atof(argv[2]);
printf("g is %f\n", g);
return 0;
}
Если я компилирую и запускаю эту программу на Mac и под Cygwin, я получаю следующее поведение:
$ ./getopttest -d 1 -1
f is 1.000000
g is -1.000000
Но если я попробую то же самое на Ubuntu иMingW на Windows Я получаю это:
$ ./getopttest -d 1 -1
./getopttest: invalid option -- '1'
Unknown option: ?
Очевидно, что было немного ошибочно иметь числовые аргументы и параметры рядом друг с другом - но есть ли способ заставить getopt вести себя согласованно?