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

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

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

用法说明

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值