getopt如何设置默认值
getopt how to set a default value
#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>
#include <string.h>
int main(int argc, char **argv) {
int o;
int w = 10;
while ((o = getopt(argc, argv, "w")) != -1) {
switch (o) {
case 'w' :
w = atoi(optarg);
break;
}
}
printf("%d\n", w);
}
基本上,如果没有输入任何内容,我希望 -w 有。
考虑这些用例
$ gcc -Wall fileabove.c
$ ./a.out
10
$ ./a.out -w
10
$ ./a.out -w14
14
我无法让第二个工作。有什么办法可以玩 getopt 以获得预期的结果吗?
假设您使用的是 GNU getopt,以下应该有效:
while ((o = getopt(argc, argv, "w::")) != -1) {
switch (o) {
case 'w' :
if (optarg) {
w = atoi(optarg);
}
break;
:
后面的 A 将选项标记为需要参数。双 :
使参数可选(这是 GNU 扩展)。如果没有参数,optarg
就是 NULL
.
#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>
#include <string.h>
int main(int argc, char **argv) {
int o;
int w = 10;
while ((o = getopt(argc, argv, "w")) != -1) {
switch (o) {
case 'w' :
w = atoi(optarg);
break;
}
}
printf("%d\n", w);
}
基本上,如果没有输入任何内容,我希望 -w 有。
考虑这些用例
$ gcc -Wall fileabove.c
$ ./a.out
10
$ ./a.out -w
10
$ ./a.out -w14
14
我无法让第二个工作。有什么办法可以玩 getopt 以获得预期的结果吗?
假设您使用的是 GNU getopt,以下应该有效:
while ((o = getopt(argc, argv, "w::")) != -1) {
switch (o) {
case 'w' :
if (optarg) {
w = atoi(optarg);
}
break;
:
后面的 A 将选项标记为需要参数。双 :
使参数可选(这是 GNU 扩展)。如果没有参数,optarg
就是 NULL
.