代码规范¶
Nexus 遵循严格的代码规范,以保障质量与安全。
C 语言标准¶
源码采用 C11
生产代码及维护范围内的 C 合同夹具采用 C11
主机 GoogleTest/GoogleMock 及外部 ABI 消费验证采用 C++17;测试框架和其 C++ 运行时均不进入固件
代码格式¶
项目使用 clang-format 自动格式化代码。提交代码前运行 clang-format。
详细注释规则另见 .kiro/steering/comment-standards.md。
缩进¶
使用 4 个空格缩进,不使用制表符
switch 语句中的 case 标签需要缩进
预处理指令不缩进
行长度¶
每行最长 80 个字符
在适当位置拆分长行
花括号¶
使用附着式花括号(K&R 风格):
if (condition) {
/* code */
} else {
/* code */
}
void function(void) {
/* code */
}
空格¶
控制关键字后加空格:
if (、for (、while (函数名后不加空格:
func()类型转换后不加空格:
(int)value行尾注释之前保留两个空格
二元运算符两侧加空格:
a + b、x = y
指针对齐¶
指针星号靠左,与类型连接:
int* ptr; /* Correct */
char* str; /* Correct */
空行¶
最多保留一个连续空行
使用空行分隔逻辑段落
命名约定¶
函数:
module_action_object(),例如nx_gpio_port_write()类型:
module_type_t,例如nx_result_t宏:
MODULE_MACRO_NAME,例如NX_SUCCESS常量:
MODULE_CONSTANT,例如NEXUS_UART0_SELECTED静态变量:使用
s_variable_name前缀全局变量:使用
g_variable_name前缀,尽可能避免全局变量
文档注释¶
全部公共 API 必须带 Doxygen 注释。本项目使用 \\ 风格 Doxygen 标签,不使用 @ 风格。
标签对齐¶
按下方示例对齐每个 Doxygen 标签后的说明。不计外围代码缩进,说明从第 21 列开始:注释起始星号之后,标签及其填充共占 17 个字符:
/**
* \brief Brief description starts at column 21
* \param[in] param: Parameter description
* \param[out] result: Output parameter description
* \return Return value description
*/
文件头格式¶
每个源文件必须包含文件头注释。
头文件 (.h):最小格式:
/**
* \file filename.h
* \brief Brief description of the file
* \author Nexus Team
*/
源文件 (.c):包含版本与版权的完整格式:
/**
* \file filename.c
* \brief Brief description of the file
* \author Nexus Team
* \version 1.0.0
* \date 2026-01-12
*
* \copyright Copyright (c) 2026 Nexus Team
*
* \details Detailed description of the file contents
* and purpose. Can span multiple lines.
*/
头文件 (.h)¶
头文件包含完整 API 文档,包括参数与返回值:
/**
* \brief Prepare an exclusively owned reusable request.
* \param[in,out] request: Quiescent caller storage.
* \param[in] deadline: Absolute monotonic deadline.
* \return Success or STATE while an earlier borrow remains.
*/
nx_result_t nx_request_prepare(nx_request_t* request, nx_time_us_t deadline);
源文件 (.c)¶
源文件定义应解释硬件顺序与不变量,不重复头文件中的 \param 或 \return。按需要使用 \brief、\details 与 \note:
/** \brief Restore the saved incoming interrupt mask. */
void nx_arch_irq_restore(nx_arch_irq_state_t state) {
/* Implementation */
}
章节注释¶
使用章节注释将代码分为逻辑块。分隔线必须准确包含 79 个字符,即 /* + 75 个字符 + */,保持既有模板:
/*---------------------------------------------------------------------------*/
/* Section Name */
/*---------------------------------------------------------------------------*/
要求:不得使用 /*===...===*/ 分隔线。统一使用 /*---...---*/。
行内注释¶
行内注释使用 /* comment */ 风格,不使用 //:
int value = 0; /* Initialize to zero */
宏注释¶
宏使用 Doxygen 块注释或行内注释:
/**
* \brief Maximum buffer size
*/
#define MAX_BUFFER_SIZE 256
/* Or use inline style */
#define MAX_BUFFER_SIZE 256 /**< Maximum buffer size */
静态函数¶
静态函数使用仅包含 \brief 的简化注释:
/**
* \brief Internal helper function description
*/
static void internal_helper(void) {
/* Implementation */
}
禁止事项¶
禁止以下做法:
使用
@风格 Doxygen 标签;必须改用\\使用
//单行注释;必须改用/* */使用
/*===...===*/章节分隔线;必须改用/*---...---*/在源文件重复
\param和\return;它们只能位于头文件
所有权与证据¶
公共声明必须说明上下文、截止时间、保留的存储及失败状态。解释为何必须执行 volatile 读取、顺序屏障或排空。SETTLED 的发布是提供者对请求的最后一次访问。取消绝不允许在完成并排空或证明受控恢复之前回收借用缓冲区。
修改的文件必须通过全文件格式及机械注释检查。使用 python scripts/setup/install_dev_tools.py 安装本地 Git 钩子。commit 与 CI 门禁共享 scripts/ci/style_gate.py;绕过钩子不构成验证结果。实际编译警告/分析器与行为证据独立于风格检查。
选定分析器检查不建立 MISRA 认证或工业功能安全资格。