When we excute cmd file with option, this paser is parsing each value of options.
ex) facedetection.exe -o B.avi -p 1000 -l A.avi
in source, parameters is parsred by "B.avi", "1000", ""(-l option exist), "A.avi"
see example source code easier understanding.
main.cpp
#include < iostream> #include < string> #include "wingetopt.h" using namespace std; struct Options { Options():Number(10),use_A(false),infile(),outfile() {} int Number; bool use_A; string infile; string outfile; }; void parse_command_line(int argc, char** argv, Options& o) { int c = -1; while( (c = getopt(argc, argv, "lo:p:")) != -1 ) { switch(c) { case 'l': o.use_A = true; break; case 'o': o.outfile = optarg; break; case 'p': o.Number = atoi(optarg); break; default: cout << "error message" << endl; exit(1); } } if( optind < argc ) { o.infile = argv[optind]; } cout << "Num : " << o.Number << endl; cout << "Input file: " << o.infile << endl; cout << "Output file: " << o.outfile << endl; cout << "Use A: " << o.use_A << endl; } int main(int argc, char** argv) { Options o; parse_command_line(argc, argv, o); }... wingetopt.h
/* POSIX getopt for Windows AT&T Public License Code given out at the 1985 UNIFORUM conference in Dallas. */ #ifdef __GNUC__ #include... wingetopt.c#endif #ifndef __GNUC__ #ifndef _WINGETOPT_H_ #define _WINGETOPT_H_ #ifdef __cplusplus extern "C" { #endif extern int opterr; extern int optind; extern int optopt; extern char *optarg; extern int getopt(int argc, char **argv, char *opts); #ifdef __cplusplus } #endif #endif /* _GETOPT_H_ */ #endif /* __GNUC__ */
/* POSIX getopt for Windows AT&T Public License Code given out at the 1985 UNIFORUM conference in Dallas. */ #ifndef __GNUC__ #include "wingetopt.h" #include < stdio.h> #define NULL 0 #define EOF (-1) #define ERR(s, c) if(opterr){\ char errbuf[2];\ errbuf[0] = c; errbuf[1] = '\n';\ fputs(argv[0], stderr);\ fputs(s, stderr);\ fputc(c, stderr);} //(void) write(2, argv[0], (unsigned)strlen(argv[0]));\ //(void) write(2, s, (unsigned)strlen(s));\ //(void) write(2, errbuf, 2);} int opterr = 1; int optind = 1; int optopt; char *optarg; int getopt(argc, argv, opts) int argc; char **argv, *opts; { static int sp = 1; register int c; register char *cp; if(sp == 1) if(optind >= argc || argv[optind][0] != '-' || argv[optind][1] == '\0') return(EOF); else if(strcmp(argv[optind], "--") == NULL) { optind++; return(EOF); } optopt = c = argv[optind][sp]; if(c == ':' || (cp=strchr(opts, c)) == NULL) { ERR(": illegal option -- ", c); if(argv[optind][++sp] == '\0') { optind++; sp = 1; } return('?'); } if(*++cp == ':') { if(argv[optind][sp+1] != '\0') optarg = &argv[optind++][sp+1]; else if(++optind >= argc) { ERR(": option requires an argument -- ", c); sp = 1; return('?'); } else optarg = argv[optind++]; sp = 1; } else { if(argv[optind][++sp] == '\0') { sp = 1; optind++; } optarg = NULL; } return(c); } #endif /* __GNUC__ */...
one more tip,
If you want to input argument values in the VS tools, you can input in here, -> property -> debug -> command argument
refer to this image~~
No comments:
Post a Comment