代码之家  ›  专栏  ›  技术社区  ›  bjoekeldude

getopt中的opterr声明

  •  3
  • bjoekeldude  · 技术社区  · 7 年前

    下面是来自的示例代码 http://www.gnu.org . 大家肯定会看到,这是getopt,我对变量声明有一个问题。为什么前面没有字体或任何文字

    opterr = 0;
    

    #include <ctype.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    
    int
    main (int argc, char **argv)
    {
      int aflag = 0;
      int bflag = 0;
      char *cvalue = NULL;
      int index;
      int c;
    
      opterr = 0;
    
    
      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 (index = optind; index < argc; index++)
        printf ("Non-option argument %s\n", argv[index]);
      return 0;
    }
    
    1 回复  |  直到 7 年前
        1
  •  5
  •   Thomas    7 年前

    opterr(3) 在中声明为外部变量 unistd.h :

    extern int optind, opterr, optopt;
    

    这是一个定义在不同翻译单元中的全局变量,在本例中是您的标准C库。

    手册页中还解释了将其设置为0的原因:

    如果 getopt() 无法识别选项字符,它会将错误消息打印到stderr,并将字符存储在 optopt ,并返回 '?' . 调用程序可以通过设置 opterr 到0。