2

使用getopt()C 中的函数,可以做到这一点:

program -a arg_for_a -b arg_for_b -c operand1 operand2

它没有问题。

但是,如何使它以这种方式工作?:

program operand1 operand2 -a arg_for_a -b arg_for_b -c

在这种情况下,包括 等在内的每个参数-a-b被视为操作数。

我正在尝试像gccssh那样做:

gcc code.c -o executable
ssh user@host -i file.pem

也就是说,无论选项和操作数出现在什么位置,都可以正确识别它们。

如何使选项无论在哪里都能被正确识别,并且不跟随选项的每个单词都被识别为操作数?

4

1 回答 1

3

如果您使用 GNU C 库的 getopt 实现,那么它将像所有 GNU 实用程序一样工作,因为几乎所有人都使用它。特别是(引自man 3 getopt):

默认情况下,getopt() 会在扫描时置换 argv 的内容,以便最终所有非选项都位于末尾。

这与gcc. gcc关心可选参数和位置参数的相对顺序。(例如,它-l在命令行中的位置有所不同。)为此,您必须告诉 GNU不要getopt置换参数。然后,每次报告完成时,都会有下一个位置参数的索引(如果有的话)。然后,您可以使用该参数 increment并继续使用,这将在下一个参数处继续。getoptoptindoptindgetopt

于 2013-07-17T03:10:06.787 回答