使用getopt() 、getopt_long()、getopt_long_only()进行命令行处理
最后,如清单 7 中所示,在 main() 函数中使用此结构。和优秀的开发人员一样,您需要首先初始化 globalArgs 结构,然后才开始处理命令行参数。在您的程序中,可以借此设置在一定情况下合理的缺省值,以便在以后有更合适的缺省值时更方便地对其进行调整。 清单 7. 初始化 int main( int argc, char *argv[] ) { int opt = 0;
/* Initialize globalArgs before we get to work. */ globalArgs.noIndex = 0; /* false */ globalArgs.langCode = NULL; globalArgs.outFileName = NULL; globalArgs.outFile = NULL; globalArgs.verbosity = 0; globalArgs.inputFiles = NULL; globalArgs.numInputFiles = 0; 清单 8 中的 while 循环和 switch 语句是用于本程序的命令行处理的代码部分。只要 getopt() 发现选项,switch 语句将确定找到的是哪个选项,将能在 globalArgs 结构中看到具体情况。当 getopt() 最终返回 -1 时,就完成了选项处理过程,剩下的都是您的输入文件了。 清单 8. 使用 getopt() 处理 argc/argv opt = getopt( argc, argv, optString ); while( opt != -1 ) { switch( opt ) { case 'I': globalArgs.noIndex = 1; /* true */ break; case 'l': globalArgs.langCode = optarg; break; case 'o': globalArgs.outFileName = optarg; break; case 'v': globalArgs.verbosity++; break; case 'h': /* fall-through is intentional */ case '?': display_usage(); break; default: /* You won't actually get here. */ break; }
opt = getopt( argc, argv, optString ); }
globalArgs.inputFiles = argv + optind; globalArgs.numInputFiles = argc - optind; 既然已经完成了参数和选项的收集工作,接下来就可以执行程序所设计的任何功能(在本例中是进行文档转换),然后退出(清单 9)。 清单 9. 开始工作 convert_document();
return EXIT_SUCCESS; } 好,工作完成,非常漂亮。现在就可以不再往下读了。不过,如果您希望程序符合 90 年代末期的标准并支持 GNU 应用程序中流行的长 选项,则请继续关注下面的内容。 (编辑:应用网_丽江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |