Aery的UE4 C++游戏开发之旅(2)编码规范

C++基础类型规范


因为PC、XBOX、PS4等各平台的C++基础类型大小可能不一样(实际上绝大部分都是整型类型的大小不一样),所以UE4提供了以下可移植基础类型的别名来统一规范类型大小:函数

  • bool 表明布尔值(不会假定布尔尺寸)。
  • TCHAR 表明字符(不会假定TCHAR尺寸)。
  • uint8 表明无符号字节(1字节)。
  • int8 表明带符号字节(1字节)。
  • uint16 表明无符号“短”字符(2字节)。
  • int16 表明带符号“短”字符(2字节)。
  • uint32 表明无符号整数(4字节)。
  • int32 表明带符号整数(4字节)。
  • uint64 表明无符号“四字”(8字节)。
  • int64 表明带符号“四字”(8字节)。
  • float 表明单精确浮点(4字节)。
  • double 表明双精确浮点(8字节)。
  • PTRINT 表明可能含有指针的整数(不会假定PTRINT尺寸)。
  1. 当须要明确基础类型尺寸大小(例如须要序列化等功能),应使用可移植的类型。
  2. 若是代码中的整型类型大小不是很重要,可直接使用C++的 int 和无符号 int 类型(不一样的平台上的大小可能不一样),典型的例子是用于循环的整型变量i。

我的认为,若是想更简单明了地选择类型的话,那么建议在类/结构体的声明部分(变量/函数返回值/函数参数等)使用可移植类型,而函数实现里出现的某些可有可无的临时变量(例如循环体的整型变量i)则能够直接使用C++基础类型。工具

UCLASS()
class MYPROJECT_API USomething: public UObject{
    UPROPERTY()
    int32 ID;

    UFUNCTION()
    uint32 GetValue();
};

uint32 USomething::GetValue(){
    uint32 value = 0;
    for(int i = 0; i < vec.size(); ++i){
        value += vec[i];
    }
    return value;
}

命名规范


  1. 命名(如类型或变量)中的每一个单词需大写首字母,单词间一般无下划线。ui

    例如:Health 和 UPrimitiveComponent,而非 lastMouseCoordinates 或 delta_coordinates。编码

  2. bool变量必须以b为前缀(例如 bPendingDestruction 或 bHasFadedIn)。指针

  3. 类型名前缀需使用额外的大写字母,用于区分其和变量命名。code

    例如:FSkin 为类型名,而 Skin 则是 FSkin 的实例。htm

    类型命名前缀规范以下:blog

    蓝图类别 前缀
    继承自 UObject U
    继承自 AActor A
    继承自 SWidget S
    抽象界面类的前缀 I
    枚举类的前缀 E
    模板类 T

    其余多数类均以F为前缀,而部分子系统则以其余字母为前缀。继承

    模板实例化的Typedef再也不是模板,并应加上相应前缀,例如:typedef TArray<FMytype> FArrayOfMyTypes;

  4. 蓝图命名:"BP"+类别缩写+"_"+名字

    例如: BPA_Player

    蓝图类别 前缀
    蓝图Actor BPA_
    蓝图结构 BPS_
    蓝图枚举 BPE_
    蓝图接口 BPI_
    蓝图函数库 BFL_
    蓝图宏库 BML_

头文件规范


  • 确保本身include的头文件不要放在 "XXX.generated.h" 文件下面,由于Unreal Header Tool编译工具默认这个文件就是头文件列表的最后一行了。

字符串规范


  • 在字符串字面量周围使用 TEXT() 宏:若未使用,在文字中构建 FStrings 的代码将致使不理想的字符转换过程。
"Hello World!";         //Not so well

TEXT("Hello World!");   //OK

字符集规范


  • 应将C++代码文件都保存为utf8格式:不然可能会出如今UE4蓝图中调用C++代码(函数、类等)时,出现注释乱码的状况。

参考


系列其余文章:Aery的UE4 C++开发之旅系列文章

相关文章
相关标签/搜索