computer_knowledge_notes/Languages/CLang/libraries/getopt.md

3.4 KiB
Raw Blame History

概述

获取函数参数。

变量

/* 定义在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

/* 定义在bits/getopt_core.h */
// 作用:解析命令行参数,只支持短选项。
// argc参数数量来自于main函数。
// argv参数数组来自于main函数。以'-'开头的被认为是一个参数。
// optstring表示短选项的字符串。形式如下
//		一个字符不带冒号:仅有选项不带参数;
//		一个字符带一个冒号:选项后面带参数;
//		一个字符带两个冒号:选项后面带可选的参数;
// 返回值:当重复调用,它会依次返回各个参数里的字符串。当无参数可解析时,返回-1。
int getopt(int argc, char * const argv[], const char *optstring);

getopt_long

/* 定义在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

/* 定义在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);