?? subgetopt.c
字號:
/* subgetopt.c, subgetopt.h: (yet another) improved getopt clone, inner layerD. J. Bernstein, djb@pobox.com.No dependencies.No system requirements.19970228: Cleanups.931129: Adapted from getopt.c.No known patent problems.Documentation in subgetopt.3.*/#define SUBGETOPTNOSHORT#include "subgetopt.h"#define sgopt subgetopt#define optind subgetoptind#define optpos subgetoptpos#define optarg subgetoptarg#define optproblem subgetoptproblem#define optdone subgetoptdoneint optind = 1;int optpos = 0;char *optarg = 0;int optproblem = 0;int optdone = SUBGETOPTDONE;int sgopt(argc,argv,opts)int argc;char **argv;char *opts;{ int c; char *s; optarg = 0; if (!argv || (optind >= argc) || !argv[optind]) return optdone; if (optpos && !argv[optind][optpos]) { ++optind; optpos = 0; if ((optind >= argc) || !argv[optind]) return optdone; } if (!optpos) { if (argv[optind][0] != '-') return optdone; ++optpos; c = argv[optind][1]; if ((c == '-') || (c == 0)) { if (c) ++optind; optpos = 0; return optdone; } /* otherwise c is reassigned below */ } c = argv[optind][optpos]; ++optpos; s = opts; while (*s) { if (c == *s) { if (s[1] == ':') { optarg = argv[optind] + optpos; ++optind; optpos = 0; if (!*optarg) { optarg = argv[optind]; if ((optind >= argc) || !optarg) { /* argument past end */ optproblem = c; return '?'; } ++optind; } } return c; } ++s; if (*s == ':') ++s; } optproblem = c; return '?';}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -