getopt
函数概述
getopt
函数用于解析命令行参数
/**
* 解析命令行参数
* @param argc 对应main函数argc
* @param argv 对应main函数argv
* @param optstring 定义选项需求字符串
* @return 有效选项字符串 -1:所有选项解析完毕 ?:遇到未知选项(默认会打印错误) :线下缺少参数(默认会打印错误)
*/
int getopt(int argc, char * const argv[], const char *optstring)
全局变量
getopt
函数依赖的全局变量
optarg
指向当前选项的指针(如果选项无参数则为NULL)optind
下一个待处理的argv
索引opterr
控制是否显示错误信息(默认为1显示错误,设置为0表示不显示错误信息)optopt
记录最后一个未知选项的字符
opstring
参数格式
格式 | 说明 |
---|---|
字符 | 表示一个无需参数的选项 |
字符: | 表示该选项必须带参数,参数可以相连也可以不相连(-a value 或 -avalue ) |
字符:: | 表示该选项参数可选,如果带参数必须直接相连(-avalue ) |
getopt(argc, argv, "ab:c::");
a
表示一个无需参数的选项b
表示该选项必须带参数c
表示该选项参数可选
getopt_long
函数概述
glibc 中的函数 getopt_long
可以用来解析长选项。
#include <getopt.h>
int getopt_long(int argc, char * const argv[],
const char *optstring,
const struct option *longopts,
int *longindex);
参数说明
longopts
为指向struct option
数组的指针,定义长选项参数longindex
返回长选项在longopts
数组中的索引
struct option
结构体
struct option {
const char *name; // 长选项名称(如 "help")
int has_arg; // 参数需求: no_argument(无参数)、required_argument(必须带参数)、optional_argument(可选参数)
int *flag; // 控制返回值(NULL 表示直接返回 val)
int val; // 返回值(或写入 flag 的值)
};
// 定义长选项表
struct option long_options[] = {
{"help", no_argument, 0, 'h'}, // 对应 --help
{"verbose", no_argument, 0, 'v'}, // 对应 --verbose
{"config", required_argument, 0, 'c'}, // 对应 --config <file>
{0, 0, 0, 0} // 数组必须以全0元素结束
};