【发布时间】:2017-03-02 23:21:41
【问题描述】:
我在 GNU/Linux 机器上使用getopt_long。
将选项列表初始化为:
static struct option long_options[] = {
{"mode", required_argument, 0, 9},
{0, 0, 0, 0}
};
有以下代码行
c = getopt_long(argc, argv, "", long_options, index_ptr);
当我使用命令运行程序时:
prog --mode
上面显示的代码行返回“?”在 c 中,但不是 ':' 根据getopt(3) 手册页的预期:"错误和 -1 返回是
与 getopt() 相同"
是的,当使用/解析短选项时,可以在选项列表中写入类似“:m:”的内容,因此缺少参数的变量 c 将包含 ':',而不是 '?',但是在解析 only 长选项时应该如何区分两种情况(缺少参数、无效选项)?
如何区分无效选项和缺少必需参数的选项?
【问题讨论】:
-
为什么在
long_options数组中使用 9 作为要返回的 val 而不是字符 '9' 以及为什么optstring/shortopts参数不包含 "9:" ? (见Example of Parsing Long Options) -
@DavidBowling
.val是一个int,但主要在.flag指针不为NULL 时使用。因为9不能用于检测快捷方式参数,所以最好使用'm'之类的字符(用于模式)。 -
是的,我在提问之前阅读了 glibc 参考手册的 getopt[_long] 部分。但目前尚不清楚在这种情况下应该返回什么。
-
@Piquard,它们返回什么并不重要,因为我想区分两种错误情况(缺少参数,无效选项)并且我只想解析长选项。
标签: c linux getopt-long command-line-arguments