初步理解getopt函数

简介:

getopt函数为C语言程序中提供命令行开关的标准程序接口。实际作用是解析命令行参数。

#include<unistd.h>

int getopt(int argc,char *const argv[],const char *opstring);
extern char *optarg;
extern int optind,opterr,optopt;

getopt函数将传递给程序mian()函数的argc,argv作为参数,同时接受一个指定指定符字符串optstring。函数getopt()认为optstring中,以‘-’开头的字符为命令行参数选项,有的参数选项后面可以跟参数值,optstring中的格式规范如下:
1) 单个字符,表示选项,
2) 单个字符后接一个冒号”:”,表示该选项后必须跟一个参数值。参数紧跟在选项后或者以空格隔开。该参数的指针赋给optarg。
3) 单个字符后跟两个冒号”::”,表示该选项后必须跟一个参数。参数必须紧跟在选项后不能以空格隔开。该参数的指针赋给optarg。(这个特性是GNU的扩张)。

getopt(argc,argv,"ab:cd");

上面例子允许几个选项-a -b -c -d 其中-b 后面需要跟一个参数 

那么解析命令行参数通常通过循环来一次得到每个选项。

如果选项中有这个关联值,那么就是上面提到的外部变量optarg来指向这个值。

如果选项处理完毕那么函数getopt返回-1,特殊参数“--”将使getopt停止扫描选项。

如果遇到无法识别的选项,getopt返回一个问号(?),并保存到外部变量optopt中。

如果一个选项要求有一个关联值(例如上面例子的-b),但是用户没有提供这个值,getopt通常返回一个问号(?),如果我们将字符串第一个字符设置为冒号(:),那么用户将在用户没提供值的情况下返回冒号(:),而不是问号(?)。

现在我们已知的变量有optarg(指向外部变量),optopt保存无法识别的参数项,还有optind,为下一个待处理参数的所以。getopt用他来记录自己的进度。此外还有些getopt版本会在遇到未知选项时打印出错信息。如果opterr变量是非零值,getopt就会向stderr打印一条出错信息。

目录
相关文章
|
算法 编译器 开发者
CMake参数解析cmake_parse_arguments 的参数用法
CMake参数解析cmake_parse_arguments 的参数用法
258 2
|
8月前
|
存储 API Windows
MASM32连接程序时error A2006: undefined symbol : u
MASM32连接程序时error A2006: undefined symbol : u
|
11月前
|
存储 C++
cin.ignore()函数和stoll函数
cin.ignore()函数和stoll函数
212 2
gets()&puts()函数
gets()&puts()函数。
66 2
error C2664: 不能将参数 1 从“const TCHAR [256]”转换为“const wchar_t *”
error C2664: 不能将参数 1 从“const TCHAR [256]”转换为“const wchar_t *”
245 0
|
C语言 固态存储
可变参数宏__VA_ARGS__和...
__VA_ARGS__ 是一个可变参数的宏(gcc支持)。实现思想就是宏定义中参数列表的最后一个参数为省略号(也就是三个点)。这样预定义宏_ _VA_ARGS_ _就可以被用在替换部分中,替换省略号所代表的字符串。
2589 0
|
JavaScript
函数arguments讲解
函数arguments讲解
函数arguments讲解
宏"__FUNCTION__" 和" __LINE__ "
宏"__FUNCTION__" 和" __LINE__ "
278 0