可选的命令行参数
Optional command line arguments
我的程序收到三个参数:
int bufferSize
int priority
int milliTimeOut
有没有办法使其中一些参数可选(并将这些参数值设置为默认值)?
例如,如果用户希望将priority
保留为默认优先级,但要插入bufferSize
并milliTimeOut
,则他在运行我的程序时键入什么,以及如何在我的程序中检查它?
这完全取决于您如何解析命令行参数。如果您使用 Boost program_options 模块,您可以通过以下方式执行以下操作:
#include <boost/program_options.hpp>
namespace po = boost::program_options;
int main(int argc, char *argv[])
{
int bufferSize;
int priority;
int milliTimeOut;
po::options_description desc("Options for my program");
desc.add_options()
// Option 'buffer-size' and 'b' are equivalent.
("buffer-size,b", po::value<int>(& bufferSize)->default_value(8192),
"The buffer's size")
// Option 'priority' and 'p' are equivalent.
("priority,p", po::value<int>(& priority)->default_value(4),
"The priority")
// Option 'timeout' and 't' are equivalent.
("timeout,t", po::value<int>(& milliTimeOut)->default_value(30000),
"Time out in ms")
;
po::variables_map vm;
po::store(po::parse_command_line(argc, argv, desc), vm);
po::notify(vm);
// Here your variables have the values specified by the user,
// or the default one.
}
然后,您可以像这样调用程序:
program --buffer-size=100000 -t 600000
program -b 100000 --priority=10
program -b 5000 -t 50000 -p 15
program
未指定的参数将获取其默认值。
您应该阅读软件包文档,它非常完整和灵活(例如,您只能对某些参数使用默认值)。
你可以实现选项,就像你在 Linux 上经常看到的那样。
$ program.exe -b 100 -p 1 -m 100
其中-b
代表缓冲区大小,后跟它的值。同样,-p
和 -m
分别代表优先级和 milliTimeOut,后跟它们的值。
你编写程序来处理这个问题,也就是说,首先解析选项,然后解析它的值。然后,您可以知道命令行上缺少哪些选项。知道缺少的选项后,您可以为其(它们)取默认值。
例如
$ program.exe -b 100 -m 100
如果缺少-p
,这意味着优先级需要具有由程序决定的默认值。
同样地
$ program.exe -b 100
其中优先级和毫超时是默认的。
是的,您可以将参数设置为可选,如果未在命令行中输入任何参数,则提供默认值。例如,您可以使用 -b
指定缓冲区大小,如果未输入任何内容,则假定为 64K:
int main(int argc, char **argv) {
int bufferSize = 65536;
然后是繁琐的代码来检查命令行参数是否以 -b
开头,如果是,则从该参数的其余部分读取所需的缓冲区大小。
您可能希望使用Boost program_options来缓解这种情况。
相关文章:
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 如何处理linux终端中带有负号(-)的C++中的命令行参数
- 使用 C++ 将命令行参数拆分为参数/向量
- 如何在OMNET++中添加专门的命令行参数?
- 如何在不传递命令行参数的情况下在 c++ 中设置环境变量
- atoi() 在应用于大型命令行参数时会产生不正确的值
- 是否可以在命令行中将输入参数传递给可执行文件
- 命令行参数,cant 或两个变量
- 在 Windows 中使用 boost::p rogram_options 从命令行参数读取 Unicode 字符
- 如何在 Android/NDK 上将命令行参数从 gradlew.bat 传递到 Clang
- 编写一个将 LLVM IR 文件作为命令行参数的程序
- 通过命令行参数获取llvm ir文件时面临问题
- 有没有办法根据命令行参数定义数组大小?运行时与编译时实例化?
- 从命令行获取参数时出现问题
- 如何在不使用文件扩展名的情况下使用命令行参数打开C++中的文本文件?
- 命令行参数在不到 3 个 LOC 中 int?
- 在命令行参数中使用引号
- 使用参数 + stdout + stderr 从命令行调用 MFC 应用程序
- 在VS2013中使用devenv (C++)传递命令行参数argv
- 二进制数据作为命令行参数