我正在编写一个简单的程序,让-d
包含一个参数以及其他参数
我希望他们使用aa.cc运行以下选项
aa -d 123 param1 param2
或aa param1 param2 -d 123
我已按以下方式编写代码
/* sample */
char *level:
while ((ch = getopt(argc, argv, "d:")) != EOF) {
switch(ch) {
case 'd':
level = optarg;
debug = TRUE;
break;
default:
usage();
/*NOTREACHED*/
}
}
当给出时,它正常工作
aa -d 123 param1 param2
但不是
当作为
aa param1 param2 -d 123
。
有人可以建议我们如何实现这一目标吗?
答案 0 :(得分:2)
除非您使用getopt()
的GNU版本,否则选项参数(例如-d 123
)必须位于非选项参数之前(例如param1
和param2
) 。 (见POSIX 'Utility Conventions'。)
如果您正在使用GNU getopt()
,它将扫描整个参数列表(最多但不包括--
参数),处理非选项后找到的选项,除非{{1}设置环境变量(在这种情况下,它的行为类似于POSIX POSIXLY_CORRECT
)。
如果您不使用GNU getopt()
,则必须在非选项之前使用选项,或者切换到GNU getopt()
,或者编写自己的选项。