--- name: code-style description: 项目 C/C++ 代码格式规范 — 缩进、括号、空格、空行、条件写法 metadata: type: feedback --- ## 缩进 使用 **Tab 字符**缩进(显示宽度 4),不使用空格缩进。 ## 括号风格(Allman 风格) 所有大括号 **独占一行**,包括函数、if、for、while、struct: ```cpp LOCAL void check_sg_zone_change() { if(g_sg_zone_saddr.empty()) { return; } for(auto &setting : g_vec_setting) { if(strcmp(setting.base.saddr, zone_saddr) == 0) { break; } } } ``` 单条语句也保留大括号,不省略。 ## 空格规则 - 关键字与括号之间 **不加空格**:`if(`, `for(`, `while(`, `switch(` - 函数名与括号之间 **不加空格**:`func(args)` - 指针声明:`type *name`(`*` 前有空格,后无空格) - 引用声明:`type &name` ## Yoda 条件 常量写在比较运算符左侧: ```cpp if(NULL == ptr) // ✓ 正确 if(0 != ret) // ✓ 正确 if(ptr == NULL) // ✗ 不符合项目风格 ``` ## 空行 - 函数之间:两行空行 - 逻辑块之间:一行空行 - `#include` 区块末尾:一行空行 ## typedef struct ```cpp typedef struct { uint32_t field1; uint8_t field2; }stru_type_name; ``` 结构体成员无缩进额外层级(与 `{` 对齐)。 ## 变量声明 - 局部静态变量用 `LOCAL` 宏(= `static`) - 全局变量用 `g_` 前缀 - 结构体用 `stru_` 前缀 - 枚举用 `enum_` 前缀,枚举值用 `ENUM_` 前缀 **Why:** 从项目中多个核心源文件(iec61850s.cpp、self_ptl.cpp、ws_method.cpp、dc_signal.cpp)提取的共识格式规范 **How to apply:** 新增代码和修改现有代码时必须遵守此格式。本次仅统一缩进/括号/空格/空行,命名问题暂不处理。