80 lines
1.8 KiB
Markdown
80 lines
1.8 KiB
Markdown
---
|
||
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:** 新增代码和修改现有代码时必须遵守此格式。本次仅统一缩进/括号/空格/空行,命名问题暂不处理。
|