C++传递选项给可执行文件

3
你如何将选项传递给可执行文件?除了使选项成为布尔参数,是否有更简单的方法?
编辑:最后两个答案建议使用参数。我知道我可以编写像那样可行的解决方案,但我宁愿它们成为选项。
编辑2:根据澄清要求,我将使用这个简单的例子:处理参数相当容易,因为它们会自动解析为一个数组。
./printfile file.txt 1000

如果我想知道用户想要打印的文件名,我通过访问argv[1]来获取它。
现在来谈谈这种情况:
./printfile file.txt 1000 --nolinebreaks

用户希望打印文件时不要有换行符。虽然程序运行时不需要这个选项(因为需要的是文件名和要打印的行数),但用户可以选择使用它。现在我可以通过以下方式实现:
./printfile file.txt 1000 true

使用提示将告知用户第三个参数用于确定是否打印带有换行符的文件。然而,这似乎相当笨拙。


您能详细解释一下吗?您是在寻找类似这样的形式:./a.out --arg1=2 --arg2=3,还是其他形式? - daniel
8个回答

11

命令行参数是正确的方法。您可能希望考虑使用Boost.ProgramOptions来简化此任务。


4
你似乎认为以“--”开头的“选项”和没有的“参数”之间存在一些根本性差异。唯一的区别在于你如何解析它们。
值得一提的是,你可以看看GNU的getopt()/getopt_long()选项解析器。它支持传递带有选项的参数,例如--number-of-line-breaks 47

我不认为有什么根本性的区别,只是我知道有一种更优雅的方式来处理它们,而不是使用布尔参数或寻找以 - 或 -- 开头的参数。getopt() 就是我在寻找的东西。谢谢! - user7545

2

我使用两种方法传递信息:

1/ 使用命令行参数,可以通过特定的库(例如getargs)更轻松地处理。

2/ 作为环境变量,使用getenv。


1

Pax 在这里的想法是正确的。

如果您需要更全面的双向通信,请使用管道打开进程并将内容发送到 stdin/监听 stdout。


1

你还可以使用Windows PostMessage()函数。如果您想要发送选项的可执行文件已经在运行中,这非常方便。如果您对这种技术感兴趣,我可以发布一些示例代码。


0
问题并不十分清晰,无法确定上下文和您的具体意图——您是指在C++程序中运行可执行文件吗?有几个标准的C库函数,如execl()、execv()、execve()等,它们接受字符串或指向字符串数组的指针作为选项。还有一个system()函数,它接受一个包含您在bash提示符下键入的任何内容(包括选项)的字符串。

0

我喜欢popt库。它是用C编写的,但在C++中也可以很好地工作。

然而,它似乎不是跨平台的。当我需要为Linux软件的Windows端口编写自己的API兼容版本时,我发现了这一点。


-1

您可以将选项放在 .ini 文件中,并使用 GetPrivateProfileXXX API 创建一个类,该类可以从 .ini 中读取您正在查找的程序选项类型。

您还可以为应用程序创建交互式 shell,以实时更改某些设置。

编辑: 根据您的编辑,您是否可以解析每个选项,查找与该选项相关联的特殊关键字,这些关键字是“可选的”?


GetPrivateProfile APIs 仅适用于 Windows。 - Ferruccio
是的,我在想我可以将一些参数视为可选的。不过,我相信有更优雅的方法来实现这个功能吧? - user7545

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接