C++下使用gflags教程

目录

一、应用场景

二、代码

三、使用

1.编译

2.在命令行中修改参数

3.通过配置文件修改

四、常用功能

1.支持的数据类型

2.可以加的默认参数


​​​​​​​gflags使用教程

gflags使用教程2

一、应用场景

gflags主要是为了运行程序时,临时修改输入参数方便,如果没有指定参数,则使用默认参数。例如有一个可执行程序connect.exe,用来向指定ip和port发送udp数据,如果不指定ip地址和端口号的话,则向一个默认的ip和端口发数据,如果用户希望自定义ip和端口,可以将参数在运行程序时指定,例如:connect.exe --ip 227.0.0.23 --port 8989。同时还能通过--help查询哪些参数可以修改;使用--flagfile=FileName通过配置文件修改参数。(注:--ip和-ip均可)

如果不用gflags的话,用户一般需要按顺序在指定位置输入参数,或者通过配置文件修改。

二、代码

#include <iostream>
#include <gflags/gflags.h>

DEFINE_string(ip, "227.0.0.23", "multi Group address");//变量名称  初始值  描述
DEFINE_int32(port, 8989, "recv port");

int main(int argc, char **argv)
{
    //设置软件版本信息 加-version可以显示
    gflags::SetVersionString("V1.0");
    //设置使用说明 加-help可以打印帮助说明
    gflags::SetUsageMessage("usage: ./a.out <command>\n"
      "commands:\n"
      "  --ip           string ip(227.0.0.3)\n"
      "  --port         int port(8080)\n");

    gflags::ParseCommandLineFlags(&argc, &argv, true);//将命令行的内容传入gflags解析
    std::cout << "init ip:port " << FLAGS_ip << ":" << FLAGS_port << std::endl;

    //检查参数有没有被修改
    gflags::CommandLineFlagInfo info;
    if (gflags::GetCommandLineFlagInfo("port", &info) && info.is_default) {
    std::cout << "port is not changed" << std::endl;
    } else {
    std::cout << "port is changed" << std::endl;//即使修改为默认值,也会被判定为修改了值
    }

    //代码修改参数
    gflags::SetCommandLineOption("port", "8888");
    std::cout << "changed ip:port " << FLAGS_ip << ":" << FLAGS_port << std::endl;

    return 0;
}

使用配置文件

--ip=123.3.3.4
--port=1234

三、使用

1.编译

 使用如下命令编译,需要链接gflags

g++ gflags_learn.cpp -std=c++11 -lgflags

2.在命令行中修改参数

3.通过配置文件修改

四、常用功能

1.支持的数据类型

DEFINE_bool: boolean
DEFINE_int32: 32-bit integer
DEFINE_int64: 64-bit integer
DEFINE_uint64: unsigned 64-bit integer
DEFINE_double: double
DEFINE_string: C++ string

2.可以加的默认参数

--help        显示所有文件的所有flag,按文件、名称排序,显示flag名、默认值和帮助

--helpfull    和 --help 相同,显示全部flag

--helpshort    只显示执行文件中包含的flag,通常是 main() 所在文件

--helpxml    类似 --help,但输出为xml

--helpon=FILE  只显示定义在 FILE.* 中得flag

--helpmatch=S  只显示定义在 *S*.* 中的flag

--helppackage  显示和 main() 在相同目录的文件中的flag

--version    打印执行文件的版本信息

--undefok=flagname,flagname,...  后面列出的flag名,可以在无定义的情况下忽略而不报错

--fromenv --tryfromenv   从环境变量中引入

--flagfile               从文件中引入

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aspiretop

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值