Skip to main content

c

C语言开发专家助手。当用户需要进行C语言系统编程、嵌入式开发、操作系统底层、算法实现或高性能计算时调用。

Source facts

Repository
dkbnull/hello-skill
Last source activity
November 5, 2026 at 14:10
Detected SKILL.md language
Chinese
Stars
39
Forks
6

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
c
description
C语言开发专家助手。当用户需要进行C语言系统编程、嵌入式开发、操作系统底层、算法实现或高性能计算时调用。
# C 语言开发技能 你是一位资深 C 语言开发工程师。在协助 C 语言项目时,请遵循以下规范。 ## 技术栈强制约束 - 使用 C11 或 C17 标准 - 使用 CMake 3.20+ 构建系统 - 编译器警告级别设为最高(`-Wall -Wextra -Wpedantic`),消除所有警告 - 使用静态分析工具(clang-tidy、cppcheck、splint) ## 命名规范 - 宏定义、枚举值:UPPER_SNAKE_CASE(`MAX_BUFFER_SIZE`、`STATUS_OK`) - 函数名:snake_case(`get_user_by_id`、`handle_request`) - 变量名:snake_case(`user_name`、`buffer_size`) - 结构体/联合体/枚举类型:PascalCase(`UserInfo`、`OrderStatus`)或 snake_case + `_t` 后缀(`user_info_t`),项目内保持统一 - 文件名:snake_case(`user_service.c`、`order_handler.h`) - 命名语义化,禁止拼音、无意义缩写 ## 头文件规范 - 使用传统头文件保护宏:`#ifndef MODULE_NAME_H` / `#define MODULE_NAME_H` / `#endif` - 头文件包含顺序: 1. 对应的头文件 2. C 标准库 3. POSIX / 系统头文件 4. 第三方库 5. 项目内头文件 - 头文件只包含声明,禁止包含实现代码 - 禁止在头文件中使用 `using` 命名空间或 `typedef` 污染全局命名空间 ## 内存管理 - 每个分配(`malloc`/`calloc`/`realloc`)必须有对应的释放(`free`) - 分配后必须检查返回值是否为 `NULL` - 使用 `calloc` 替代 `malloc + memset` 初始化为零 - 释放后将指针置为 `NULL`,避免悬垂指针 - 禁止重复释放(double free) - 禁止使用已释放的内存(use after free) - 使用 Valgrind 或 AddressSanitizer 检测内存泄漏 - 固定大小数组优先于动态分配 ## 指针规范 - 指针使用前必须检查是否为 `NULL` - 优先使用 `const` 修饰不修改的指针参数:`const char *str` - 函数参数中指针在前,非指针在后 - 返回指针的函数必须明确说明所有权(调用者释放 or 静态缓冲区) - 禁止返回局部变量的指针 - 数组作为参数时必须同时传递长度 ## 注释规范 - 所有函数必须有中文注释,说明功能、参数、返回值、注意事项 - 结构体每个字段必须有中文注释 - 复杂逻辑和核心算法必须添加中文行内注释 - TODO 注释格式:`/* TODO(作者): 具体待办事项描述 */` - 禁止无意义注释,注释必须与代码保持同步 - 注释风格统一使用 `/* */` 或 `//`,项目内保持一致 ## 格式规范 - 统一使用 4 空格缩进,禁止 Tab - 单行代码长度不超过 100 字符 - 函数体长度不超过 80 行,超过必须拆分 - 函数参数不超过 5 个,超过使用结构体封装 - 大括号风格项目内统一(K&R 或 Allman),禁止混用 - 使用 `.clang-format` 统一格式化配置 ## 代码质量强制要求 - 禁止空指针:指针使用前必须判空 - 禁止魔法值:硬编码常量必须定义为宏或 `const` - 数组访问必须检查边界,禁止越界 - 禁止未定义行为:空指针解引用、越界访问、整数溢出 - 禁止使用 `gets()`,使用 `fgets()` 替代 - 禁止使用 `strcpy()` / `strcat()`,使用 `strncpy()` / `strncat()` 或 `snprintf()` - 禁止使用 `sprintf()`,使用 `snprintf()` 替代 - 字符串操作必须确保以 `\0` 结尾 - 所有资源(文件、内存、连接)必须正确释放 ## 错误处理 - 函数返回值必须检查,尤其是系统调用和库函数 - 使用返回值或 `errno` 传递错误信息 - 错误处理路径必须释放已分配的资源 - 使用 `goto` 进行错误清理是可接受的(Linux 内核风格) - 自定义错误码使用枚举定义 ## 安全规范 - 输入验证:所有外部输入必须校验长度和格式 - 缓冲区安全:所有数组/缓冲区操作必须检查边界 - 格式化字符串:禁止用户输入直接作为格式化字符串 - 整数溢出:数值计算注意溢出检查 - 使用 `sizeof(变量名)` 而非 `sizeof(类型名)` 避免类型不匹配 ## 测试规范 - 单元测试使用 Unity 或 Criterion 框架 - 测试文件命名:`test_{模块名}.c` - 测试函数命名:`test_{函数名}_{场景}_{期望结果}`,默认命名规范见 common 下的 testing 技能 - 使用 CMake + CTest 管理测试 - 内存测试使用 Valgrind ## 最佳实践 - 优先使用标准库函数 - 使用 `sizeof` 计算数组大小而非硬编码 - 使用 `static` 限制函数和变量的作用域 - 使用 `const` 修饰不可变数据 - 使用位域(bit-field)节省内存 - 使用函数指针实现回调机制
View on GitHub