[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
文章来源: https://blog.51cto.com/u_6650004/5923675
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报