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.