我試圖理解一個類的一段骨架代碼。預期的用法是:C,getopt()如何更新
./a.out -d -n Foo -i Bar
骨架代碼工作正常,但我從來沒有使用getopt()
並不能明白爲什麼它工作正常(理解它沒有任何關係與分配,我只是想感覺)。它如何更新/退出while循環?我沒有看到一個指針遞增,或者循環中傳遞給它的參數根本不會改變。
char *optString = "-d-n:-i:";
int opt = getopt(argc, argv, optString);
while (opt != -1) {
switch(opt) {
case 'd':
debug = 1;
break;
case 'n':
nameserver_flag = 1;
nameserver = optarg;
break;
case 'i':
hostname = optarg;
break;
case '?':
usage();
exit(1);
default:
usage();
exit(1);
}
opt = getopt(argc, argv, optString);
}
提供'getopt'的libc是免費軟件。如果你想詳細瞭解它的工作原理,只需研究源代碼即可。你也可以使用'argp'函數。 –
請參閱GNU libc的[getopt.c](https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=posix/getopt.c;hb=HEAD)。 –
@BasileStarynkevitch,謝謝你,幫助我們瞭解它爲什麼有效。它看起來像'optarg'是隱藏索引 – asimes