如何将选项传递给可执行文件?有没有比制作选项布尔参数更简单的方法?
编辑:最后两个答案建议使用参数。我知道我可以编写一个可行的解决方案,但我宁愿让它们成为选项。
EDIT2:根据要求澄清,我将使用这个简单的例子: 处理参数相当容易,因为它们会自动解析为数组。
./printfile file.txt 1000
如果我想知道用户想要打印的文件的名称,我可以通过argv [1]访问它。
现在谈谈这种情况:
./printfile file.txt 1000 --nolinebreaks
用户希望打印文件时没有换行符。这不是程序能够运行所必需的(因为文件名和要打印的行数),但是如果他/她想要,用户可以选择使用。现在我可以使用:
./printfile file.txt 1000 true
使用提示将通知用户第三个参数用于确定是否使用换行符打印文件。然而,这似乎相当笨拙。
答案 0 :(得分:11)
命令行参数是要走的路。您可能需要考虑使用Boost.ProgramOptions来简化此任务。
答案 1 :(得分:4)
您似乎认为以“--
”开头的“选项”和没有“getopt()
”的“参数”之间存在一些根本区别。唯一的区别在于你如何解析它们。
看看GNU的getopt_long()
/ --number-of-line-breaks 47
选项解析器可能值得您花些时间。它支持使用{{1}}等选项传递参数。
答案 2 :(得分:2)
我使用两种方法传递信息:
1 /使用命令行参数,使用特定库(如getargs)更容易处理。
2 /作为环境变量,使用getenv。
答案 3 :(得分:1)
Pax在这里有正确的想法。
如果您需要更彻底的双向通信,请使用管道打开进程并将内容发送到stdin / stdout上的stdin。
答案 4 :(得分:1)
您也可以使用Window的PostMessage()函数。如果要发送选项的可执行文件已在运行,这非常方便。如果您对此技术感兴趣,我可以发布一些示例代码。
答案 5 :(得分:0)
关于上下文以及您正在尝试做什么,问题并不是非常明确 - 您是指在C ++程序中运行可执行文件?有几个标准的C库函数,其名称类似于execl(),execv(),execve(),...将选项作为字符串或指向字符串数组的指针。还有system(),其中包含一个字符串,其中包含您在bash提示符下输入的内容,选项和所有内容。
答案 6 :(得分:0)
我喜欢popt库。它是C,但也可以在C ++中正常工作。
但它似乎并不是跨平台的。当我不得不为某些Linux软件的Windows端口破解我自己的API兼容版本时,我发现了这一点。
答案 7 :(得分:-1)
您可以将选项放在.ini文件中,并使用GetPrivateProfileXXX API's创建一个类,该类可以从.ini中读取您要查找的程序选项类型。
您还可以为应用创建交互式外壳,以实时更改某些设置。
编辑: 从你的编辑中,你不能只解析每个选项,寻找与该选项相关的“可选”特殊关键词吗?