私は現在、数値のコマンドライン引数を受け入れることができる簡単なプログラムをCで書いています。ただし、コマンドラインオプションも必要です。数値引数の1つが負の場合、異なるオペレーティングシステム間で不整合があることに気付きました(つまり、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とWindowsのMingWで同じことを試してみると、次のようになります。
$ ./getopttest -d 1 -1
./getopttest: invalid option -- '1'
Unknown option: ?
明らかに、数値の引数とオプションを並べて配置するのは少し間違いでしたが、getoptを一貫した方法で動作させる方法はありますか?