4059056 发表于 2014-03-04 15:47

请教getopt函数所涉及的optind变量详细含义

getopt函数我就不详细说了,
关于optind变量,从网上搜的含义是:optind——再次调用 getopt() 时的下一个 argv 指针的索引。对此不是很明白,请详细解析

3Q

timespace 发表于 2014-03-04 18:24

虽然没看getopt的源码,但man写的挺清楚。
以GNU的getopt看,先将argv中非option的参数移到argv后端,这就可以让option变成位置无关的,optind初值为1,getopt会渐进遍历argv,每次调用后都会让optind指向下一个option在argv中索引,每次optind移动多少取决于optstring:
1. 遇到"x",选项不带参数,optind += 1
2. 遇到“x:”,带参数的选项,optarg = argv, optind += 2
3. 遇到“x::”,可选参数,属于#1和#2之一,GNU扩展实现。
如果一切顺利,最后optind应该指向第一个非option参数,如果optind >= argc,说明没有已经没有参数了。如果遇到不认识的参数或丢失的参数,另外两个全局变量“opterr, optopt”就派上用场了,剩下的就看文档和源代码吧。

4059056 发表于 2014-03-04 20:27

:mrgreen: 谢谢,讲的非常非常好!回复 2# timespace


   

MMMIX 发表于 2014-03-05 16:14

回复 1# 4059056


    这个你就应该看手册,而不是在网上搜。
页: [1]
查看完整版本: 请教getopt函数所涉及的optind变量详细含义