longopt.c

来自「一个C源代码分析器」· C语言 代码 · 共 93 行

C
93
字号
#include <stdio.h>/* Flag set by @samp{--verbose}.  */static int verbose_flag;intmain (argc, argv)     int argc;     char **argv;{  int c;  while (1)    {      static struct option long_options[] =	{	  /* These options set a flag.  */	  {"verbose", 0, &verbose_flag, 1},	  {"brief", 0, &verbose_flag, 0},	  /* These options don't set a flag.	     We distinguish them by their indices.  */	  {"add", 1, 0, 0},	  {"append", 0, 0, 0},	  {"delete", 1, 0, 0},	  {"create", 0, 0, 0},	  {"file", 1, 0, 0},	  {0, 0, 0, 0}	};      /* @code{getopt_long} stores the option index here.  */      int option_index = 0;      c = getopt_long (argc, argv, "abc:d:",		       long_options, &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;	case 'b':	  puts ("option -b\n");	  break;	case 'c':	  printf ("option -c with value `%s'\n", optarg);	  break;	case 'd':	  printf ("option -d with value `%s'\n", optarg);	  break;	case '?':	  /* @code{getopt_long} already printed an error message.  */	  break;	default:	  abort ();	}    }  /* Instead of reporting @samp{--verbose}     and @samp{--brief} as they are encountered,     we report the final status resulting from them.  */  if (verbose_flag)    puts ("verbose flag is set");  /* Print any remaining command line arguments (not options).  */  if (optind < argc)    {      printf ("non-option ARGV-elements: ");      while (optind < argc)	printf ("%s ", argv[optind++]);      putchar ('\n');    }  exit (0);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?