chengzhao-dev

developing-cpp

编写或修改 C++11–C++23 源码、头文件、命名、异常与源码注释时使用,新工程默认 C++23;一次改动同时碰到源码和构建文件时先打开本技能。不用于只改文档、Python、CMake、构建脚本或与 C++ 无关的文件。

chengzhao-dev 0 Updated 5h ago

Resources

4
GitHub

Install

npx skillscat add chengzhao-dev/dsh-cpp-workflow/developing-cpp

Install via the SkillsCat registry.

SKILL.md

developing-cpp

本技能处理换一台机器也不会改的源码内容:可观察行为、库与程序的边界、声明、命名、异常和源码注释。文件槽位与守卫以 references/file-template.md 为准;排版、命名、头文件与包含顺序以 references/google-cpp-style.md 的 Google 基线为准。异常条文取自 C++ Core Guidelines 的 Error handling,只约束开发期的源码,不进入插件运行时。CMakeLists.txt 与 cmake/ 开 configuring-cmake;running-build.sh、.clang-*、.vscode/ 和 environment.json 的维护开 building-cpp(本技能只读其中的 standard)。只改函数体、命名、异常或注释且入口命令可运行时,定实现后只开 building-cpp 的「通过检查」;新增或移动源文件、改库与程序的边界、补测试 target 时,声明和实现可以先写,但完成前必须开 configuring-cmake 把文件写进 CMake,再开 building-cpp 定工具配置并通过检查。.qmd、仓库 README、Python 和非 C++ 文档不打开本技能。

适用场景

存在项目技能 cpp-workflow-project 时先读它的 SKILL.md:工程名、库与程序的边界、阶段表、术语增补、入口命令与语言档位。项目技能没有写档位时,才读 environment.json 的 standard;两者都没有时才用本技能的新工程默认 C++23。声明 C++20 的工程里不要写 C++23 才有的设施;没有项目技能时门禁不会放出本技能,不要猜项目约定。

源码和构建文件的编码以 building-cpp 的 references/encoding.md 为准;行尾与 .clang-format 的 LineEnding 跟仓库根 .gitattributes 和 .editorconfig。

三种操作

一次只选一种,范围(单点、整段)是任务属性。操作与域的判据、边界和交接见 references/change-model.md;四类改动是域,不是操作。

操作 什么时候用 从哪步进
写作(起稿) 新增类型、函数或文件;改可观察行为;改库与程序的边界;补构造后置条件与成员事实 第 1 步;新工程走到第 4 步
改写 行为与契约不变,文件位置、声明顺序或函数体组织不对 从被打破的步重走,可到第 4 步
润色 只改命名或注释措辞 第 3 步

三种操作共用这些约束:不发明阶段表和用户请求里没有的行为、类型和命令;选类型与写法时以项目声明的语言标准为上限;只改注释或格式时不改可观察行为;不覆盖已有源码;不安装工具链;代理侧不写 wsl 或 bash -lc。计划、命名方案或注释措辞与条文、项目技能或用户明确要求冲突时,先列冲突位置、原文与出处,由用户选一条;不自行取舍,也不默认采用计划。后一步发现前一步没做完,退回那一步,不在当前步补结构。拿不准先用单点修正;做到一半发现边界被打破,退回整段重构,从被打破的那一步重走。

步骤

步 名称 文件 一句话
1 定行为 steps/01-behavior.md 把这一处要能观察到的结果写成验收句
2 定边界 steps/02-boundary.md 决定哪些放库、哪些放程序,依赖朝哪个方向
3 定声明 steps/03-declaration.md 写命名、声明顺序、头文件契约和声明注释
4 定实现 steps/04-implementation.md 写 .cpp 函数体的操作顺序、分组和实现注释

每步只打开同号的一个步骤文件。判不准才打开 examples/ 里与该步对应的案例;references/ 保存完整条文,只在排错、整目录重构,或步骤里明确指向某一条文时按需打开。性能问题读 references/performance.md,标准库设施选型读 references/standard-library.md,链接与产物的细节读 building-cpp 的 references/linking.md。

本轮激活按三条上限走:

  • 只开当前步对应的一个步骤文件;同一改动域内不同时展开两个技能的步骤。跨域按 源码 → configuring-cmake → building-cpp 的顺序逐段进入,前一段结论落下再开下一段。
  • 条文只开该步点名的一份;同号案例留到下一次激活。
  • 标准档只打开项目技能声明的那一档,没有声明时用本技能已有的新工程默认,不把其余标准档读进来。

项目技能列出了检查命令时只跑那一条,没有时跑本技能自己的 scripts/checking-comments.mjs;退出码为 0 后在同一轮结束 goal,不再继续走没有失败的步骤。

四类改动

四类改动是操作内部的域:操作定入口,域定层次。四域的定义、边界与次序见 references/change-model.md;一次改动混了两类时,按「写作 → 布局 → 排版 → 润色」拆开做,前一类落定并经检查再进下一类。

类型 典型请求 入口步骤
写作 新增类型、函数或文件;改可观察行为;改库与程序的边界;补构造后置条件与成员事实 steps/01-behavior.md
布局 换文件位置、拆头文件、调声明顺序、补测试 target;改注释位置与行尾形态 steps/03-declaration.md
排版 只改缩进、行宽、包含顺序或注释符号 steps/03-declaration.md
润色 只改命名、只改注释措辞 steps/03-declaration.md

只改格式时不动行为,只改注释时不动签名;条文由入口步骤按需打开。

同一处命中多条规则时,先按 references/priority.md 的五级次序判:行为与契约 > 结构 > 清晰 > 一致 > 形式。高层未解决,不先做低层润色;低层改动碰到高层事实就停手退回。

完成判据

  • 第 1 步的行为句能被用户或测试验收;有阶段表时只覆盖对应行,没有时只覆盖用户点名的行为。
  • 第 2 步的库 target 不依赖终端、GUI 或脚本;程序 target 只做装配和输入输出;共享抽象有第二个真实使用方。
  • 第 3 步的公共头文件自包含,命名、声明顺序和异常声明符合 references/ 的条文。
  • 第 4 步的实现只兑现声明;资源由 RAII 管理;失败是正常结果时用返回值,函数无法完成任务时抛异常,不拿异常做正常分支。
  • 源码注释符合 references/comments.md 的四节规范,node "<skill-dir>/scripts/checking-comments.mjs" --root <项目根> 无输出。
  • 没有改 CMakeLists.txt、.clang-*、构建脚本,也没有把外部资料路径或项目专属类名写进通用条文。

Categories