返回

[c++实践]01-参数解析

发布时间:2022-12-18 18:06:32 315
# ios

参数解析

手动编码

以最简单的方式进行编码,约定如下:

  • 第一个参数是应用本身
  • 使用条件判断每个选项,并且根据选项是否需要value来对索引进行递增
  • 另外,如果是非法输入,std::stoi会抛出异常,因此安全起见需要捕获异常
#include 
#include
#include
#include



struct DataRouterCfg
{
uint32_t sd_ttl_ms{300}; // someip的ttl,默认300ms
int32_t systick_us{0}; // 用于设置系统的滴答时间,单位微秒
int64_t delay_time_us{1000}; // 延时时间,单位us
};


void datarouter_usage(const std::string &error_msg)
{
std::stringstream ss;
ss << error_msg << std::endl;
ss << "Options:" << std::endl;
ss << "ttl: set someip ttl in ms,default 300ms" << std::endl;
ss << "systick: set QNX sys tick in us,default 0, which means not use ClockPeriod to set sys tick" << std::endl;
ss << "tp_delay: set TP delay in us,default 1000" << std::endl;
ss << "help: print this message" << std::endl;
ss << "example 1:DataRouter ttl 5" << std::endl;
ss << "example 2:DataRouter systick 100 tp_delay 1000" << std::endl;
ss << "example 3:DataRouter help" << std::endl;
std::cout << ss.str();
}



void parse_cmd(int argc, char* argv[],DataRouterCfg &cfg)
{
for (int i = 1; i < argc; i++)
{
const std::string cmd(argv[i]);
if (cmd == "help" || i >= argc)
{
datarouter_usage("");
exit(1);
}


if (cmd == "ttl")
{
std::string value(argv[i+1]);
i++;
cfg.sd_ttl_ms = std::stoi(value);
}
else if (cmd == "systick")
{
std::string value(argv[i+1]);
i++;
cfg.systick_us = std::stoi(value);
}
else if (cmd == "tp_delay")
{
std::string value(argv[i+1]);
i++;
cfg.delay_time_us = std::stoi(value);
}
else
{
datarouter_usage("Unknown Option");
exit(1);
}
}
return;
}


int main(int argc,char **argv)
{
DataRouterCfg cfg;
parse_cmd(argc,argv,cfg);
std::cout << "cfg.delay_time_us:" << cfg.delay_time_us << std::endl;
std::cout << "cfg.sd_ttl_ms:" << cfg.sd_ttl_ms << std::endl;
std::cout << "cfg.systick_us:" << cfg.systick_us << std::endl;
return 0;
}

使用​​getopt​​系列函数

  • ​​​https://blog.csdn.net/qq_33850438/article/details/80172275/​​
  • ​​https://blog.csdn.net/bluebird_shao/article/details/128067350​​
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线