Skip to content

ArgOptional

Description

Register an optional value option. Target keeps its prior value if the option doesn’t appear – initialise with the default you want.

Usage example (from documentation)

  u32 timeout = 30;
  ArgOptional(&p, NULL, "--timeout", &timeout, "connection timeout in seconds");

Success

Appends an ARG_ROLE_OPTIONAL spec to the parser; the target is overwritten only if the option appears on the command line.

Failure

LOG_FATAL if parser is NULL, if target resolves to an unsupported type (ARG_KIND_INVALID), or if both short_ and long_ are NULL.

Usage example (Cross-references)

Usage examples (Cross-references)
    
        u32 timeout = 30;
        ArgOptional(&p, NULL, "--timeout", &timeout, "seconds");
    
        char  *argv[] = {(char *)"prog"};
    
        u32 timeout = 30;
        ArgOptional(&p, NULL, "--timeout", &timeout, "seconds");
    
        char  *argv[] = {(char *)"prog", (char *)"--timeout", (char *)"5"};
    
        u32 n = 0;
        ArgOptional(&p, NULL, "--n", &n, "count");
    
        char  *argv[] = {(char *)"prog", (char *)"--n=12345"};
    
        i64 v = 0;
        ArgOptional(&p, NULL, "--v", &v, "v");
    
        char  *argv[] = {(char *)"prog", (char *)"--v", (char *)"-42"};
    
        f64 ratio = 1.0;
        ArgOptional(&p, NULL, "--ratio", &ratio, "r");
    
        char  *argv[] = {(char *)"prog", (char *)"--ratio=2.5"};
    
        Str name = StrInit(&a);
        ArgOptional(&p, NULL, "--name", &name, "n");
    
        char  *argv[] = {(char *)"prog", (char *)"--name", (char *)"alice"};
    
        u32 n = 0;
        ArgOptional(&p, NULL, "--n", &n, "");
    
        char  *argv[] = {(char *)"prog", (char *)"--n", (char *)"abc"};
    
        u8 v = 0;
        ArgOptional(&p, NULL, "--v", &v, "");
    
        char  *argv[] = {(char *)"prog", (char *)"--v=256"};
        DefaultAllocator a = DefaultAllocatorInit();
        ArgParse         p = ArgParseInit("prog", NULL, &a);
        ArgOptional(&p, NULL, "--enable", out, "toggle");
        char  *argv[] = {(char *)"prog", (char *)"--enable", (char *)text};
        ArgRun rc     = ArgParseRun(&p, 3, argv);
        ArgParse         p = ArgParseInit("prog", NULL, &a);
        bool             v = true;
        ArgOptional(&p, NULL, "--enable", &v, "toggle");
        char  *argv[] = {(char *)"prog", (char *)"--enable", (char *)"maybe"};
        ArgRun rc     = ArgParseRun(&p, 3, argv);
        i16              lo = 0;
        i16              hi = 0;
        ArgOptional(&p, NULL, "--lo", &lo, "lo");
        ArgOptional(&p, NULL, "--hi", &hi, "hi");
        char  *argv[] = {(char *)"prog", (char *)"--lo=-32768", (char *)"--hi=32767"};
        i16              hi = 0;
        ArgOptional(&p, NULL, "--lo", &lo, "lo");
        ArgOptional(&p, NULL, "--hi", &hi, "hi");
        char  *argv[] = {(char *)"prog", (char *)"--lo=-32768", (char *)"--hi=32767"};
        ArgRun rc     = ArgParseRun(&p, 3, argv);
        ArgParse         p = ArgParseInit("prog", NULL, &a);
        i16              v = 5;
        ArgOptional(&p, NULL, "--v", &v, "v");
        char  *argv[] = {(char *)"prog", (char *)"--v=32768"};
        ArgRun rc     = ArgParseRun(&p, 2, argv);
        ArgPositional(&p, "source", &src, "src file");
        ArgRequired(&p, "-l", "--listen", &listen, "host:port");
        ArgOptional(&p, NULL, "--timeout", &timeout, "secs");
        ArgFlag(&p, "-v", "--verbose", &verbose, "be loud");
    
        Zstr mode = NULL;
        ArgOptional(&p, NULL, "--mode", &mode, "");
    
        // "      --mode <MODE>" width = 19, widest, pad to 21.
        DefaultAllocator a = DefaultAllocatorInit();
        ArgParse         p = ArgParseInit("prog", NULL, &a);
        ArgOptional(&p, NULL, "--n", out, "count");
        char *argv[] = {(char *)"prog", (char *)"--n", (char *)text};
        *rc          = ArgParseRun(&p, 3, argv);
        DefaultAllocator a = DefaultAllocatorInit();
        ArgParse         p = ArgParseInit("prog", NULL, &a);
        ArgOptional(&p, NULL, "--n", out, "count");
        char *argv[] = {(char *)"prog", (char *)"--n", (char *)text};
        *rc          = ArgParseRun(&p, 3, argv);
        ArgParse         p = ArgParseInit("prog", NULL, &a);
        u8               v = 0;
        ArgOptional(&p, NULL, "--v", &v, "");
        char  *argv[] = {(char *)"prog", (char *)"--v=200"};
        ArgRun rc     = ArgParseRun(&p, 2, argv);
        ArgParse         p = ArgParseInit("prog", NULL, &a);
        u8               v = 0;
        ArgOptional(&p, NULL, "--v", &v, "");
        char  *argv[] = {(char *)"prog", (char *)"--v=255"};
        ArgRun rc     = ArgParseRun(&p, 2, argv);
        ArgParse         p = ArgParseInit("prog", NULL, &a);
        u16              v = 0;
        ArgOptional(&p, NULL, "--v", &v, "");
        char  *argv[] = {(char *)"prog", (char *)"--v=65535"};
        ArgRun rc     = ArgParseRun(&p, 2, argv);
        ArgParse         p = ArgParseInit("prog", NULL, &a);
        u16              v = 9;
        ArgOptional(&p, NULL, "--v", &v, "");
        char  *argv[] = {(char *)"prog", (char *)"--v=65536"};
        ArgRun rc     = ArgParseRun(&p, 2, argv);
        ArgParse         p = ArgParseInit("prog", NULL, &a);
        u32              v = 0;
        ArgOptional(&p, NULL, "--v", &v, "");
        char  *argv[] = {(char *)"prog", (char *)"--v=70000"};
        ArgRun rc     = ArgParseRun(&p, 2, argv);
        ArgParse         p = ArgParseInit("prog", NULL, &a);
        u32              v = 11;
        ArgOptional(&p, NULL, "--v", &v, "");
        char  *argv[] = {(char *)"prog", (char *)"--v=4294967296"};
        ArgRun rc     = ArgParseRun(&p, 2, argv);
        ArgParse         p = ArgParseInit("prog", NULL, &a);
        u64              v = 0;
        ArgOptional(&p, NULL, "--v", &v, "");
        char  *argv[] = {(char *)"prog", (char *)"--v=5000000000"};
        ArgRun rc     = ArgParseRun(&p, 2, argv);
        Str              name = StrInit(&a);
        StrPushBackMany(&name, "stale");
        ArgOptional(&p, NULL, "--name", &name, "n");
        char  *argv[] = {(char *)"prog", (char *)"--name", (char *)"bob"};
        ArgRun rc     = ArgParseRun(&p, 3, argv);
        ArgParse         p = ArgParseInit("prog", NULL, &a);
        Zstr             s = NULL;
        ArgOptional(&p, NULL, "--name", &s, "n");
        char  *argv[] = {(char *)"prog", (char *)"--name", (char *)"carol"};
        ArgRun rc     = ArgParseRun(&p, 3, argv);
        ArgParse         p = ArgParseInit("prog", NULL, &a);
        i16              v = 0;
        ArgOptional(&p, NULL, "--v", &v, "");
        char  *argv[] = {(char *)"prog", (char *)"--v=-5"};
        ArgRun rc     = ArgParseRun(&p, 2, argv);
        ArgParse         p = ArgParseInit("prog", NULL, &a);
        i16              v = 7;
        ArgOptional(&p, NULL, "--v", &v, "");
        char  *argv[] = {(char *)"prog", (char *)"--v", (char *)"zzz"};
        ArgRun rc     = ArgParseRun(&p, 3, argv);
        ArgParse         p = ArgParseInit("prog", NULL, &a);
        i32              v = 0;
        ArgOptional(&p, NULL, "--v", &v, "");
        char  *argv[] = {(char *)"prog", (char *)"--v=-100000"};
        ArgRun rc     = ArgParseRun(&p, 2, argv);
        ArgParse         p = ArgParseInit("prog", NULL, &a);
        i32              v = 13;
        ArgOptional(&p, NULL, "--v", &v, "");
        char  *argv[] = {(char *)"prog", (char *)"--v", (char *)"nope"};
        ArgRun rc     = ArgParseRun(&p, 3, argv);
        ArgParse         p = ArgParseInit("prog", NULL, &a);
        f32              v = 0;
        ArgOptional(&p, NULL, "--v", &v, "");
        char  *argv[] = {(char *)"prog", (char *)"--v=2.5"};
        ArgRun rc     = ArgParseRun(&p, 2, argv);
        ArgParse         p = ArgParseInit("prog", NULL, &a);
        f32              v = 9;
        ArgOptional(&p, NULL, "--v", &v, "");
        char  *argv[] = {(char *)"prog", (char *)"--v", (char *)"xyz"};
        ArgRun rc     = ArgParseRun(&p, 3, argv);
        ArgParse         p = ArgParseInit("prog", NULL, &a);
        u32              t = 0;
        ArgOptional(&p, NULL, "--timeout", &t, "secs");
        Str  help = StrInit(&a);
        bool got  = capture_help_file(&p, &help);
        Zstr hostname = NULL;
        ArgRequired(&p, "-l", "--listen", &listen, "host:port to listen on");
        ArgOptional(&p, NULL, "--timeout", &timeout, "connection timeout");
        ArgFlag(&p, "-v", "--verbose", &verbose, "verbose logging");
        ArgPositional(&p, "hostname", &hostname, "name to resolve");
Last updated on