title: a long option whose "val" happens to be `0`?
body: <p>From <a href="https://www.gnu.org/software/libc/manual/html_node/Getopt-Long-Option-Example.html" rel="nofollow noreferrer">GNU C library manual</a></p>
  
  <pre><code>#include &lt;stdio.h&gt;
  #include &lt;stdlib.h&gt;
  #include &lt;getopt.h&gt;
  
  /* Flag set by ‘--verbose’. */
  static int verbose_flag;
  
  int
  main (int argc, char **argv)
  {
    int c;
  
    while (1)
      {
        static struct option long_options[] =
          {
            /* These options set a flag. */
            {"verbose", no_argument,       &amp;verbose_flag, 1},
            {"brief",   no_argument,       &amp;verbose_flag, 0},
            /* These options don’t set a flag.
               We distinguish them by their indices. */
            {"add",     no_argument,       0, 'a'},
            {"append",  no_argument,       0, 'b'},
            {"delete",  required_argument, 0, 'd'},
            {"create",  required_argument, 0, 'c'},
            {"file",    required_argument, 0, 'f'},
            {0, 0, 0, 0}
          };
        /* getopt_long stores the option index here. */
        int option_index = 0;
  
        c = getopt_long (argc, argv, "abc:d:f:",
                         long_options, &amp;option_index);
  
        /* Detect the end of the options. */
        if (c == -1)
          break;
  
        switch (c)
          {
          case 0:
            /* If this option set a flag, do nothing else now. */
            if (long_options[option_index].flag != 0)
              break;
            printf ("option %s", long_options[option_index].name);
            if (optarg)
              printf (" with arg %s", optarg);
            printf ("\n");
            break;
  
          case 'a':
            puts ("option -a\n");
            break;
  </code></pre>
  
  <p>What kind of option will make the program reach inside <code>case 0</code> and </p>
  
  <pre><code>printf("option %s", long_options[option_index].name);
  </code></pre>
  
  <p>Is it a long option whose flag is not set, or a long option whose "val" happens to be <code>0</code>? </p>
  
  <p>What kind of option does " {0, 0, 0, 0}" specify?</p>