computer_knowledge_notes/Languages/CLang/libraries/getopt.md

76 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#### 概述
获取函数参数。
#### 变量
```c
/* 定义在bits/getopt_core.h */
extern char *optarg; // 用于getopt和调用者之间通信当getopt找到带有参数的选项时参数值放在这里。
extern int optind, opterr, optopt;
// optindargv里下一个待处理参数的索引。用于对getopt的重复调用。
// opterr调用者在这里存储0以禁止getopt因未识别的选项而打印错误消息。
// optopt设置未识别的选项字符。
/* 定义在bits/getopt_ext.h。描述的是长选项。 */
// 在getopt_long()和getopt_long_only()里longopts参数就是以此结构体为元素的数组数组末尾的元素为全0。
struct option{
const char *name; // 长选项的名称
int has_arg; // 是否需要参数0不需要1需要2均可。(注:不可是枚举类型,因为编译器可能会认为类型不匹配)
int *flag; // 控制getopt_long函数的返回值。为NULL则返回val非NULL则返回0且flag指针指向的变量将存放val的值
int val; // 代表长选项所对应的整数值。
};
```
#### getopt
```c
/* 定义在bits/getopt_core.h */
// 作用:解析命令行参数,只支持短选项。
// argc参数数量来自于main函数。
// argv参数数组来自于main函数。以'-'开头的被认为是一个参数。
// optstring表示短选项的字符串。形式如下
// 一个字符不带冒号:仅有选项不带参数;
// 一个字符带一个冒号:选项后面带参数;
// 一个字符带两个冒号:选项后面带可选的参数;
// 返回值:当重复调用,它会依次返回各个参数里的字符串。当无参数可解析时,返回-1。
int getopt(int argc, char * const argv[], const char *optstring);
```
#### getopt_long
```c
/* 定义在bits/getopt_ext.h */
// 作用:解析命令行参数,支持--开头的长选项和-开头的短选项。
// argc, argv直接从main函数传递而来
// optstring表示短选项的字符串。形式如下
// 一个字符不带冒号:仅有选项不带参数;
// 一个字符带一个冒号:选项后面带参数;
// 一个字符带两个冒号:选项后面带可选的参数;
// longopts结构体option的数组用于存放长选项参数。
// longind长选项在longopts中的索引用于调试一般为NULL。
// 返回值如option.flag==NULL则返回值为option.val。如返回-1表示处理完毕。
extern int getopt_long (int argc, char *const argv[],
const char *optstring,
const struct option *longopts, int *longindex);
```
#### getopt_long_only
```c
/* 定义在bits/getopt_ext.h */
// 作用与getopt_long基本相同区别在于长选项字串是用"-"开始的,而不是"--"。
// argc, argv直接从main函数传递而来
// optstring表示短选项的字符串。形式如下
// 一个字符不带冒号:仅有选项不带参数;
// 一个字符带一个冒号:选项后面带参数;
// 一个字符带两个冒号:选项后面带可选的参数;
// longopts结构体option的数组用于存放长选项参数。
// longind长选项在longopts中的索引用于调试一般为NULL。
// 返回值如option.flag==NULL则返回值为option.val。如返回-1表示处理完毕。
extern int getopt_long_only (int argc, char *const argv[],
const char *optstring,
const struct option *longopts, int *longindex);
```