C++中如何自定义命令行参数——完整实例演示

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhoucheng05_13/article/details/82180090

C++为自定义命令选项提供了专门的库:getopt.h。其中最重要的函数是:

int getopt_long(int argc, char * const argv[],
           const char *optstring,
           const struct option *longopts, int *longindex);

它的说明文档:https://linux.die.net/man/3/getopt_long
该文档里面详细介绍了函数中各个参数的意思,以及使用示例,非常清晰。如果看不懂英文文档,可以查看文档下半部分的用法说明,我会对该方法的用法进行一个归纳。
首先上一个测试用例:

测试用例

源码

#include <getopt.h>
#include <iostream>

using std::cout;
using std::endl;

int main(int argc, char *argv[])
{
    int c;
    //定义长参数选项,如--file
    static struct option long_options[] =
    {
        {"file", required_argument,NULL,'f'},
        {"check",no_argument,      NULL,'c'},
        {"load", no_argument,      NULL,'l'}
    };

    //循环执行,确保所有选项都能得到处理
    while(1)
    {
        int opt_index = 0;
        //参数解析方法,重点
        c = getopt_long(argc, argv,"cf:l", long_options,&opt_index);

        if(-1 == c)
        {
            break;
        }
        //根据返回值做出相应处理
        switch(c)
        {
            case 'c':
                cout << "check data" << endl;
                break;
            case 'f':
                cout << "file:" << optarg << endl;
                break;
            case 'l':
                cout << "load data!" << endl;
                break;
            default:
                cout << "???" << endl;
                break;
        }
    }
}

编译运行:

[nigel@DevTJ-todo-1507091995 ~/app]$ g++ cmdArgument.cpp -o cmdArgument
[nigel@DevTJ-todo-1507091995 ~/app]$ ./cmdArgument -c -f logfile -l
check data
file:logfile
load data!
[nigel@DevTJ-todo-1507091995 ~/app]$ ./cmdArgument -c -l
check data
load data!
[nigel@DevTJ-todo-1507091995 ~/app]$ ./cmdArgument --check -l
check data
load data!
[nigel@DevTJ-todo-1507091995 ~/app]$ ./cmdArgument --check --load
check data
load data!
[nigel@DevTJ-todo-1507091995 ~/app]$ ./cmdArgument -f
./cmdArgument: option requires an argument -- 'f'
???
[nigel@DevTJ-todo-1507091995 ~/app]$ ./cmdArgument --file logfile
file:logfile

现在看不懂这个例子没关系,只有保留了该例子的印象即可。下面开始用法说明。

用法说明

猜你喜欢

转载自blog.csdn.net/zhoucheng05_13/article/details/82180090
今日推荐