首先推荐SimpleIni和yaml-cpp库分别处理INI和YAML配置文件,前者轻量头文件仅需适合简单键值对,后者支持复杂嵌套结构;示例展示了加载文件、读取字符串、整数、布尔值及数组的方法,并强调异常捕获、节点存在性检查与路径管理等注意事项。

在C++项目中,读取配置文件是常见的需求。INI和YAML因其结构清晰、易于编写,被广泛用于应用程序的配置管理。下面介绍如何在C++中读取这两种格式的配置文件,并给出合适的库推荐与使用示例。
一、读取INI配置文件
INI文件是一种简单的键值对格式,通常包含节(section)、键(key)和值(value),适合存储轻量级配置。
常用C++库:SimpleIni
SimpleIni 是一个轻量、跨平台、头文件-only 的库,支持ASCII、UTF-8、Unicode等编码,非常适合嵌入式或小型项目。
立即学习“C++免费学习笔记(深入)”;
使用步骤:
- 从官网或GitHub下载 SimpleIni.h 并添加到项目中
- 包含头文件并使用其API读取配置
示例代码:
#include "SimpleIni.h"
#include <iostream>
<p>int main() {
CSimpleIniA ini;
ini.SetUnicode();
SI_Error rc = ini.LoadFile("config.ini");
if (rc < 0) {
std::cout << "无法加载配置文件\n";
return 1;
}</p><pre class="brush:php;toolbar:false;">// 读取字符串
const char* name = ini.GetValue("user", "name", "default_name");
// 读取整数
long age = ini.GetLongValue("user", "age", 0);
// 读取布尔值
bool active = ini.GetBoolValue("user", "active", false);
std::cout << "Name: " << name << "\n";
std::cout << "Age: " << age << "\n";
std::cout << "Active: " << (active ? "yes" : "no") << "\n";
return 0;}
对应的 config.ini 示例:
[user] name=Tom age=25 active=true
二、读取YAML配置文件
YAML 格式支持嵌套结构、数组、映射等复杂数据类型,适合更复杂的配置场景。
推荐库:yaml-cpp
yaml-cpp 是一个功能强大、社区活跃的C++ YAML解析库,基于CMake构建,支持现代C++语法。
安装 yaml-cpp:
- 使用包管理器(如vcpkg、conan)
- 或从GitHub克隆并编译安装
示例代码:
#include <iostream>
#include <yaml-cpp/yaml.h>
<p>int main() {
try {
YAML::Node config = YAML::LoadFile("config.yaml");</p><pre class="brush:php;toolbar:false;"> std::string name = config["user"]["name"].as<std::string>();
int age = config["user"]["age"].as<int>();
bool active = config["user"]["active"].as<bool>();
std::cout << "Name: " << name << "\n";
std::cout << "Age: " << age << "\n";
std::cout << "Active: " << (active ? "yes" : "no") << "\n";
// 读取数组
if (config["features"]) {
for (const auto& feat : config["features"]) {
std::cout << "Feature: " << feat.as<std::string>() << "\n";
}
}
} catch (const YAML::Exception& e) {
std::cerr << "YAML解析错误: " << e.what() << "\n";
return 1;
}
return 0;}
对应的 config.yaml 示例:
user: name: Tom age: 25 active: true features: - logging - auth - cache
编译时需链接 yaml-cpp 库,例如:
g++ main.cpp -o main -lyaml-cpp
三、库选择建议
根据项目规模和需求选择合适工具:
- 若配置简单、追求零依赖,用 SimpleIni 处理 INI 文件
- 若需要层级结构、列表、对象嵌套,推荐 yaml-cpp
- 嵌入式或资源受限环境可考虑手写简易INI解析器
- 避免使用过时或不再维护的库(如 inih 虽轻量但功能有限)
现代C++项目建议优先考虑 yaml-cpp,它提供良好的类型安全和异常处理机制。
四、注意事项
实际使用中注意以下几点:
- 始终进行异常捕获,特别是 yaml-cpp 可能抛出 YAML::Exception
- 检查节点是否存在再访问,避免崩溃:
if (node["key"]) { ... } - 配置文件路径建议使用相对路径或运行时传入
- 调试时可输出整个Node结构帮助排查问题:
std::cout
基本上就这些。选择合适的库并合理封装读取逻辑,能让配置管理更清晰可靠。










