可选的命令行参数

Optional command line arguments

本文关键字:参数 命令行      更新时间:2023-10-16

我的程序收到三个参数:

int bufferSize
int priority
int milliTimeOut

有没有办法使其中一些参数可选(并将这些参数值设置为默认值)?

例如,如果用户希望将priority保留为默认优先级,但要插入bufferSizemilliTimeOut,则他在运行我的程序时键入什么,以及如何在我的程序中检查它?

这完全取决于您如何解析命令行参数。如果您使用 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来缓解这种情况。