簡體   English   中英

可選的命令行參數

[英]Optional command line arguments

我的程序收到三個參數:

int bufferSize
int priority
int milliTimeOut

有沒有辦法使這些參數中的一些成為可選參數(並將這些參數值設置為默認值)?

例如,如果用戶希望將priority保留為默認優先級,但要插入bufferSizemilliTimeOut ,那么他在運行程序時會鍵入什么內容,以及如何在程序中進行檢查?

您可以實現options ,就像在Linux上經常看到的那樣。

$ program.exe -b 100 -p 1 -m 100

-b代表bufferSize,后跟一個值。 類似地, -p-m代表prioritymilliTimeOut ,后跟一個值。

您編寫程序來處理此問題,即首先解析option ,然后解析其值。 然后,您可以知道命令行上缺少哪些選項。 一旦知道缺少的選項,就可以為其選擇默認值。

例如,

$ program.exe -b 100 -m 100

其中-p缺少,這意味着優先級需要具有默認值,該默認值由您的程序決定。

同樣,

$ program.exe -b 100 

默認情況下, prioritymilliTimeOut是默認值。

這完全取決於您如何解析命令行參數。 如果使用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

您未指定的參數將獲得其默認值。

您應該閱讀軟件包文檔 ,該文檔非常完整且靈活(例如,您只能為某些參數使用默認值)。

是的,您可以將參數設為可選,並在命令行中未輸入默認值的情況下提供默認值。 僅舉例來說,您可以使用-b指定緩沖區大小,如果未輸入,則假定為64K:

int main(int argc, char **argv) { 

    int bufferSize = 65536;

然后是繁瑣的代碼,以檢查命令行參數是否以-b開頭,如果是,則從該參數的其余部分讀取所需的緩沖區大小。

您可能需要使用Boost program_options來緩解這種情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM