| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 | #include <getopt.h>#include <stdio.h>#include <string.h>#include <unistd.h>intmain (int argc, char **argv){  static const struct option options[] =    {      {"required", required_argument, NULL, 'r'},      {"optional", optional_argument, NULL, 'o'},      {"none",     no_argument,       NULL, 'n'},      {"color",    no_argument,       NULL, 'C'},      {"colour",   no_argument,       NULL, 'C'},      {NULL,       0,                 NULL, 0 }    };  int aflag = 0;  int bflag = 0;  char *cvalue = NULL;  int Cflag = 0;  int nflag = 0;  int idx;  int c;  int result = 0;  while ((c = getopt_long (argc, argv, "abc:", options, NULL)) >= 0)    switch (c)      {      case 'a':	aflag = 1;	break;      case 'b':	bflag = 1;	break;      case 'c':	cvalue = optarg;	break;      case 'C':	++Cflag;	break;      case '?':	fputs ("Unknown option.\n", stderr);	return 1;      default:	fprintf (stderr, "This should never happen!\n");	return 1;      case 'r':	printf ("--required %s\n", optarg);	result |= strcmp (optarg, "foobar") != 0;	break;      case 'o':	printf ("--optional %s\n", optarg);	result |= optarg == NULL || strcmp (optarg, "bazbug") != 0;	break;      case 'n':	puts ("--none");	nflag = 1;	break;      }  printf ("aflag = %d, bflag = %d, cvalue = %s, Cflags = %d, nflag = %d\n",	  aflag, bflag, cvalue, Cflag, nflag);  result |= (aflag != 1 || bflag != 1 || cvalue == NULL	     || strcmp (cvalue, "foobar") != 0 || Cflag != 3 || nflag != 1);  for (idx = optind; idx < argc; idx++)    printf ("Non-option argument %s\n", argv[idx]);  result |= optind + 1 != argc || strcmp (argv[optind], "random") != 0;  return result;}
 |