SuperAPI AI 工具集

coding-standards

编程与开发

查看项目

更新于 11-06 16:21

技能介绍

这是一个面向 Unreal Engine C++ 的编码规范技能,用于让新写或改造的代码与 Epic 官方风格及项目既有风格保持一致。总原则是先匹配周围的代码,本规范作为没有其它约定时的默认值。

用途

  • 编写新的 UE C++ 头文件或源文件时套用规范。
  • 审查或清理代码以统一风格。
  • 为类型、成员、函数、文件选择命名。
  • 组织头文件中的 include 与前置声明。

主要能力

  1. 类型前缀(反射类型强制):U 为 UObject 子类(非 Actor),A 为 AActor 子类,F 为普通结构体或非 UObject 类,E 为枚举/enum class,I 为抽象接口类,T 为类模板,S 为 Slate 控件,b 为布尔变量。前缀之后使用 PascalCase,且去掉前缀的类名须与文件名一致(AMyPawn → MyPawn.h)。
  2. 命名:所有标识符(类型、函数、成员、局部变量、参数)用 PascalCase,不用 m_ 前缀、camelCase 或 snake_case;布尔加 b(bIsDead);返回 bool 的函数用提问式命名(IsAlive()、ShouldClearBuffer());输出引用参数加 Out;类型与变量名为名词,函数名为动词短语;描述性命名,仅保留 AI、HUD、LOD、GC 等既有缩写;宏用 UE_ALL_CAPS_WITH_UNDERSCORES。
  3. 格式:Allman 大括号,即使单语句块也加括号;制表符缩进(宽 4 字符),行内对齐才用空格;一行一条语句;指针/引用空格为 FType* Ptr、const FType& Ref;禁止变量跨作用域遮蔽;switch 必须有显式 default,故意贯穿需 // falls through 注释。
  4. 语言约定:指针用 nullptr;重写虚函数加 override,禁止再重写处加 final;const 正确性(非修改成员函数为 const,非平凡参数用 const&,按值返回不加 const);构造 FString/FName 的字符串字面量用 TEXT("...");用 enum class 而非普通枚举,暴露给蓝图时以 uint8 为底层类型,值用 PascalCase,位域枚举用 ENUM_CLASS_FLAGS 并设 None = 0;引擎侧代码用引擎容器(TArray、TMap、TSet、FString、FName)替代 std 对应物;auto 仅用于 lambda、冗长迭代器或类型确实无法从上下文判断处,并显式加 const、& 或 *;优先范围 for,TMap 按 for (TPair<K,V>& Kvp : Map) 迭代;转移所有权用 MoveTemp(X);lambda 优先显式捕获而非 [=]/[&],延迟 lambda 用 CreateWeakLambda / BindWeakLambda;UObject 以指针传递;序列化或复制数据用 int32、uint32、uint8、float、double、TCHAR 等可移植整数类型。
  5. 头文件与包含:头文件顺序为版权注释、#pragma once、CoreMinimal 或细粒度核心头、所需引擎/模块头、最后是 X.generated.h(必须最后,UHT 要求);源文件先包含自身匹配头文件再包含实现依赖;遵循 IWYU,不依赖传递包含;头文件只需指针/引用时前置声明,.cpp 中再包含完整头文件。
  6. 反射风格:反射类/结构体的首个成员为 GENERATED_BODY();模块内公开类加 *_API 导出宏(如 MYGAME_API);编辑器可见的 UPROPERTY/UFUNCTION 必须设 Category;meta=(...) 放在说明符列表最后;UPROPERTY 持有的 UObject 派生指针用 TObjectPtr<T>(UE5+ 现代写法)。
  7. 注释与文档:内联用 //,公开 API 声明用 /** ... */ JavaDoc 风格注释(会显示为蓝图提示与 API 文档);注释解释“为什么”而非“做什么”;类注释说明解决的问题,多行方法注释记录用途、参数单位/范围、返回值及 @warning/@see/@deprecated。
  8. 日志与错误:用 UE_LOG 配合命名日志类别;check() 用于不变量(所有构建中止,内部不得有副作用);ensure() 用于可恢复的“不应发生”情况(非 Shipping 构建触发一次并返回 bool);提交前移除调试打印。

使用时可按需查阅随技能提供的三份参考文档:references/naming-conventions.md(全部前缀规则、PascalCase 细节、布尔/枚举/函数/宏命名、接口配对)、references/formatting-and-includes.md(Allman、制表符、switch 风格、const 细节、#pragma once、包含顺序、IWYU、前置声明、API 导出宏)、references/reflection-and-uht.md(UCLASS/USTRUCT/UENUM/UPROPERTY/UFUNCTION 说明符参考、TObjectPtr、GENERATED_BODY() 与常见 UHT 错误)。

适用场景

  • 新建或维护 Unreal Engine C++ 模块、Actor、组件、接口、Slate 控件。
  • 团队统一代码风格、代码评审与清理。
  • 避免 UHT 编译错误和反射相关常见坑。

限制与常见错误提醒

  • 前缀错误或缺失会导致 UHT 构建错误;generated.h 不放在最后会导致生成代码出错;缺少 GENERATED_BODY() 会引发未定义符号编译错误。
  • 编辑器暴露属性缺少 Category 会导致细节面板归类混乱。
  • 使用 m_ 前缀或 snake_case、布尔缺 b 不符合规范。
  • 引擎侧代码用 std 容器、漏写 override、使用 NULL/0、字符串字面量缺 TEXT()、auto 滥用、lambda 用 [=]/[&] 捕获 UObject 指针(GC 不可见)或延迟 [&] 悬空,均被列为问题。
  • 规范中的做法本身不提供工具、平台或价格信息;文本未给出价格、许可与平台支持,暂未提供。