大家好,又见面了,我是你们的朋友全栈君。
– 解析命令的可选项
【说明】 只是一个简单的解析命令可选项的函数,只能进行简单的格式命令解析,格式如下:
1、形如: //对短选项的解析; 2、形如: //对短选项及短选项的参数解析; 3、形如: //选项a的参数也是可选的情况解析 4、形如:// cmd [-a][-b] 这样的形式也能解析
原型:
描述:
1、 函数解析命令行参数,、 是调用 函数时传入的参数。传入的’-‘开始的字符被解析为选项, 一次执行解析出一个 ,如果循环执行,可以将 中的全部 解析出来; 2、在 的执行中,每次进入都会更新 变量,该变量指向下一个 参数; 3、如 返回-1,表示 中的所有选项被解析出, 指向第一个非选项的 argument 元素;这里要注意,在 执行过程中会将单独的 argument 交换到 数组的后面, 选项提前,如:,如果 a/b 均为不带参数的选项,这最终 数组变为:; 4、 指定选项合法的选项,一个字符代表一个选项,在字符后面加一个 ‘:’ 表示该选项带一个参数,字符后带两个 ‘:’ 表示该选项带可选参数(参数可有可无),若有参数, 指向该该参数,否则 为 0; 5、前面说了 会进行 顺序的调整,但也可以通过设置 改变它的方式,这里有两种: 1) 如果 的第一个参数是 ‘+’ 或者 被设置,则 在原 的顺序上遇到第一个非选项就返回 -1; 2) 如果 的第一个参数是 ‘-’,则会将所有的非选项当选项处理,并且返回 1,用字符代码 1 表示该选项; 6、如果 不能识别一个选项字符,它会打印一个错误消息到 上,并将该字符存放到 中,返回 ‘?’;调用程序可以设置 设置不打印错误信息;注意:要使能打印错误信息, 的第一个字符(或者在第一个字符是 +/- 之后)不能是 ‘:’,否则也不会打印错误; 7、如果 中指定了 需要参数,但在命令行没有参数,那么 将返回 ‘?’,如果在 的第一个字符(或者在第一个字符是 +/- 之后)是 ‘:’,那么将返回 ‘:’; 8、如果在选项中有 “–”,并且前后是空格,其含义是强制终止 的继续执行,返回 -1,这个可以用来做一些特殊的处理;
返回值:
1、返回类型为 ,这个在编程的时候要注意,因为返回值类型范围要包含 -1,很容易返回值接收定义为 ,但在一些系统中 是无符号的,将导致程序错误; 2、当传入的 中的选项全部被解析, 返回 -1,这也是 进行选项解析的循环截至条件; 3、如果 中解析出 中描述的选项字符,则返回该字符,如果该选项指定了参数,则全局变量 指向该参数; 4、如果 遇到一个非 指定的选项字符,这表示该选项是未识别的,返回 ‘?’,并且将该选项存放到全局变量 中; 5、如果 指定了选项必须带参数,但传入的相应 丢失了参数,返回值依赖于 的第一个字符,若第一个字符是 ‘:’,返回 ‘:’,否则返回 ‘?’;由于非法的选项返回也是 ‘?’,所以常常 的第一个字符指定为 ‘:’;同时将该选项存放到全局变量 中;
测试例程:
然后我们运行测试例程,自己根据前面的描述进行一些分析:
从这个可以看出,带参数的option参数可以紧跟,也可以中间有空格;
从这里可以看出,对于 是可跟参数也可不跟参数的,参数必须紧跟,中间不能有空格。同时还可以看出:在有 argument在 中,最后出现了 元素位置变化,选项前移了,而参数后移;
这里可以看出未识别的 ,和丢失参数的 情况;
这块代码说明了 第一个字符的作用,剩余的其他功能读者自己分析;
这一块说明了 “–” 的应用;
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/133444.html原文链接:https://javaforall.cn
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/1676.html