【发布时间】:2012-10-16 09:55:11
【问题描述】:
我正在使用函数getopt_long 来获取命令行选项。
当给出无效选项时,我想忽略错误。
目前它向 stderr 打印错误,例如:
invalid option -- 's'
【问题讨论】:
我正在使用函数getopt_long 来获取命令行选项。
当给出无效选项时,我想忽略错误。
目前它向 stderr 打印错误,例如:
invalid option -- 's'
【问题讨论】:
getopt.h 中有变量opterr,如果您将其设置为 0,它将避免将错误打印到stderr。
只需将其设置为 0:
extern int opterr;
opterr = 0;
【讨论】:
sed -e),因此对于未知选项,无法确定以下参数是否应该被解释为新选项或无效选项的参数。因此,虽然您的答案是正确的,但我不建议您使用它,除非您真的知道自己在做什么,并且了解您将遇到的与您的程序未来版本的不兼容类型。
<unistd.h>,而不是手动声明opterr。
getopts_long打印的stderr,仅此而已。不确定会出现什么不兼容。 opterr 不是局部变量。它在 getopt.h 中声明,并且可以选择设置为这种情况。我无法看到已删除的答案,反正还没有:)
-e 选项,那么未来版本会将 -e -i 视为单个选项(-i 是-e),但旧版本会将其视为不带参数的忽略 -e 选项和单独的 -i 选项。类似地,-e x 将被视为新版本中 -e 选项的参数 x,而忽略的 -e 选项和单独的 x 命令行参数通常被视为文件名。
<getopt.h>,这是特定于平台的。 POSIX 标头是<unistd.h>,无论您使用哪个标头,它都应该已经声明opterr,而您的代码不必说extern int opterr;。 (getopt_long 不是 POSIX 的一部分(除非它已经被添加),但 getopt 和它的 opterr getopt_long 是。)