--- name: cpp-coding-style description: C/C++ 代码风格规范。用于本仓库 C/C++ 新增、修改、重构时,统一格式、命名、include 顺序和现代 C++ 用法。 --- # C/C++ 风格规范 ## 基础约束 - 使用 `C++17` - 4 空格缩进 - 大括号使用 K&R 风格 - 单行长度尽量不超过 100 ## 命名规则 - 类型(`class/struct/enum`):`PascalCase` - 函数/方法:`PascalCase` - 普通变量:`snake_case` - 成员变量:`snake_case_` - 常量:`kPascalCase` - 宏:`ALL_CAPS` - 命名空间:小写 ## include 顺序 1. 对应头文件 2. C 系统头 3. C++ 标准库 4. 第三方库 5. 项目内头文件 组间空一行。 ## 代码习惯 - 单行 `if/for/while` 也加大括号 - 不使用 `using namespace std;` - 优先 `constexpr`、`[[nodiscard]]`、RAII - 优先 `static_cast`,避免 C 风格强转 - `auto` 只在不降低可读性时使用 ## 注释与日志 - 注释优先说明"为什么",不是"做了什么" - 保留高价值中文注释,不随手删除 - 强制包含 `#include "logger/Logger.hpp"`(或其相对路径) - **统一使用流式日志宏**:`LOG_DEBUGS()`、`LOG_INFOS()`、`LOG_WARNS()`、`LOG_ERRORS()`,通过 `<<` 拼接内容。严禁使用 `std::cerr`/`std::cout`、第三方日志原生接口或混用其他宏。 ```cpp // 正确:流式 LOG_ERRORS() << "SerialTransport: 无法打开串口 " << port_ << ": " << strerror(errno); // 错误:传参格式 LOG_ERRORS("SerialTransport: 无法打开串口 {}: {}", port_, strerror(errno)); // 错误:原生输出 std::cerr << "SerialTransport: 无法打开串口" << std::endl; ``` - 日志风格沿用同模块既有前缀和语气