cxxopts.h学习记录

cxxopts.h是一个C++轻量级命令行选项解析器。在VS中,简单理解就是对工程项目文件的命令参数和工作目录进行读取解析。在一个程序中如果需要读取多个文件时,就比c++原生态读取int main(int argc, char **argv)中的argv方便很多。在这里插入图片描述
笔者在使用过程中遇到了一个bug卡了很久,报错是:cxxopts::option_requires_argument_exception,位于内存位置 0x000000849A3FEE00 处。

在这里插入图片描述
最后参考官方文档https://github.com/jarro2783/cxxopts找到问题了,发现是名称较长的命令参数,比如前面图中的pano,要加两个短横线,就是–。官方文档说明如下:
在这里插入图片描述

如有跟我一样有遇到问题的朋友,去读一读官方文档问题应该就能解决了(英文不好的小伙伴可以百度翻译一下*_*)。

在 C++ 中,main函数的参数解析有两种方式:使用argc和argv,或者使用特定的命令行参数解析库。 1. 使用argc和argv: 在C++中,main函数的参数列表通常包括两个参数:argc和argv。其中argc是一个整数,表示程序运行时命令行参数的数量;argv是一个字符指针数组,表示每个参数的值。 例如,以下代码可以输出程序运行时的所有命令行参数: ```cpp #include <iostream> int main(int argc, char *argv[]) { std::cout << "argc = " << argc << std::endl; for (int i=0; i<argc; i++) { std::cout << "argv[" << i << "] = " << argv[i] << std::endl; } return 0; } ``` 2. 使用命令行参数解析库: 如果程序需要接受较为复杂的命令行参数,使用命令行参数解析库可以更方便地处理参数。常见的命令行参数解析库有Boost.Program_options、getopt和cxxopts等。 例如,以下代码使用cxxopts库解析命令行参数: ```cpp #include <iostream> #include "cxxopts.hpp" int main(int argc, char* argv[]) { cxxopts::Options options("MyProgram", " - example command line options"); options.add_options() ("f,file", "File name", cxxopts::value<std::string>()) ("n,num", "Number", cxxopts::value<int>()->default_value("10")) ("v,verbose", "Verbose output", cxxopts::value<bool>()->default_value("false")); auto result = options.parse(argc, argv); if (result.count("file")) { std::cout << "File name: " << result["file"].as<std::string>() << std::endl; } if (result.count("num")) { std::cout << "Number: " << result["num"].as<int>() << std::endl; } if (result.count("verbose")) { std::cout << "Verbose output enabled" << std::endl; } return 0; } ``` 这段代码使用cxxopts库定义了三个命令行参数:-f/--file,-n/--num和-v/--verbose,并分别指定了它们的类型和默认值。程序运行时,可以通过result对象获取这些参数的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值