title: Getopt not included? implicit declaration of function ‘getopt’
body: <p>I wanted to use getopt, but it just won't work.</p>
  
  <p>It's giving me</p>
  
  <pre><code>gcc -g -Wall -std=c99 -ftrapv -O2 -Werror -Wshadow -Wundef -save-temps -Werror-implicit-function-declaration   -c -o src/main.o src/main.c
  src/main.c: In function ‘main’:
  src/main.c:13:2: error: implicit declaration of function ‘getopt’ [-Werror=implicit-function-declaration]
  src/main.c:23:14: error: ‘optarg’ undeclared (first use in this function)
  src/main.c:23:14: note: each undeclared identifier is reported only once for each function it appears in
  src/main.c:26:9: error: ‘optopt’ undeclared (first use in this function)
  src/main.c:28:5: error: implicit declaration of function ‘isprint’ [-Werror=implicit-function-declaration]
  src/main.c:36:5: error: implicit declaration of function ‘abort’ [-Werror=implicit-function-declaration]
  src/main.c:36:5: error: incompatible implicit declaration of built-in function ‘abort’ [-Werror]
  src/main.c:43:15: error: ‘optind’ undeclared (first use in this function)
  cc1: all warnings being treated as errors
  make: *** [src/main.o] Error 1
  </code></pre>
  
  <p>Here's the source if you wanna see it
  (almost exact copypasta from getopt manpage)</p>
  
  <pre><code>#include &lt;stdio.h&gt;
  #include &lt;unistd.h&gt; // getopt
  #include "myfn.h"
  
  int main(int argc, char *argv[])
  {
  
      int aflag = 0;
      int bflag = 0;
      char *cvalue = NULL;
      int c;
  
      while((c = getopt(argc, argv, "abc:")) != -1) {
  
          switch(c) {
              case 'a':
                  aflag = 1;
                  break;
              case 'b':
                  bflag = 1;
                  break;
              case 'c':
                  cvalue = optarg;
                  break;
              case '?':
                  if (optopt == 'c')
                      fprintf (stderr, "Option -%c requires an argument.\n", optopt);
                  else if (isprint(optopt))
                      fprintf (stderr, "Unknown option `-%c'.\n", optopt);
                  else
                      fprintf (stderr, "Unknown option character `\\x%x'.\n", optopt);
  
                  return 1;
  
              default:
                  abort ();
          }
  
      }
  
      printf ("aflag = %d, bflag = %d, cvalue = %s\n", aflag, bflag, cvalue);
  
      for (int i = optind; i &lt; argc; i++) {
          printf ("Non-option argument %s\n", argv[i]);
      }
  
      return 0;
  }
  </code></pre>
  
  <p>Any ideas what I'm doing wrong?</p>
  
  <p>I'm on Linux, so I assumed it should work like this.</p>