使用 getopt() 进行命令行处理
2008-11-13 08:31:44 来源:WEB开发网清单 1. 声明 main() 函数的两种方式
int main( int argc, char *argv[] );
int main( int argc, char **argv );
第一种方式使用的是指向 char 指针数组,现在似乎很流行这种方式,比第二种方式(其指针指向多个指向 char 的指针)略微清楚一些。由于某些原因,我使用第二种方式的时间更多一些,这可能源于我在高中时艰难学习 C 指针的经历。对于所有的用途和目的,这两种方法都是一样的,因此可以使用其中您自己最喜欢的方式。
当 C 运行时库的程序启动代码调用您的 main() 时,已经对命令行进行了处理。argc 参数包含参数的计数值,而 argv 包含指向这些参数的指针数组。对于 C 运行时库,arguments 是程序的名称,程序名后的任何内容都应该使用空格加以分隔。
例如,如果使用参数 -v bar www.ibm.com 运行一个名为 foo 程序,您的 argc 将设置为 4,argv 的设置情况将如清单 2 中所示。
清单 2. argv 的内容
argv[0] - foo
argv[1] - -v
argv[2] - bar
argv[3] - www.ibm.com
一个程序仅有一组命令行参数,因此我要将此信息存储在记录选项和设置的全局结构中。对程序有意义的要跟踪的任何内容都可以记录到此结构中,我将使用结构来帮助减少全局变量的数量。正如我在网络服务设计文章(请参阅参考资料)所提到的,全局变量非常不适合用于线程化编程中,因此要谨慎使用。
示例代码将演示一个假想的 doc2html 程序的命令行处理。该 doc2html 程序将某种类型的文档转换为 HTML,具体由用户指定的命令行选项控制。它支持以下选项:
-I——不创建关键字索引。
-l lang——转换为使用语言代码 lang 指定的语言。
更多精彩
赞助商链接