如何将选项传递给可执行文件?有没有比制作选项布尔参数更简单的方法?

编辑:最后两个答案建议使用参数。我知道我可以编写一个可行的解决方案,但我宁愿让它们成为选项。

EDIT2:根据要求澄清,我将使用这个简单的例子: 处理参数相当容易,因为它们会自动解析为数组。

./printfile file.txt 1000

如果我想知道用户想要打印的文件的名称,我可以通过argv [1]访问它。

现在谈谈这种情况:

./printfile file.txt 1000 --nolinebreaks

用户希望打印文件时没有换行符。这不是程序能够运行所必需的(因为文件名和要打印的行数),但是如果他/她想要,用户可以选择使用。现在我可以使用:

./printfile file.txt 1000 true

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

有帮助吗?

解决方案

您似乎认为“选项”之间存在一些根本区别。以“ - ”开头的和“论据”那不。唯一的区别在于你如何解析它们。

看看GNU的 getopt() / getopt_long()选项解析器可能值得花时间。它支持使用 - number-of-line-breaks 47 等选项传递参数。

其他提示

命令行参数是要走的路。您可能需要考虑使用Boost.ProgramOptions来简化此任务。

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

1 /使用命令行参数,使用特定库(如getargs)更容易处理。

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

Pax在这里有正确的想法。

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

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

关于上下文以及您正在尝试做什么,问题并不是非常明确 - 您是指在C ++程序中运行可执行文件?有几个标准的C库函数,其名称类似于execl(),execv(),execve(),...将选项作为字符串或指向字符串数组的指针。还有system(),其中包含一个字符串,其中包含您在bash提示符下输入的内容,选项和所有内容。

我喜欢popt库。它是C,但也可以在C ++中正常工作。

但它似乎并不是跨平台的。当我不得不为某些Linux软件的Windows端口破解我自己的API兼容版本时,我发现了这一点。

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

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

编辑: 根据您的修改,您不能只解析每个选项,寻找与该选项相关联的特殊关键字“可选”吗?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top