代码风格

命名风格

openHiTLS 使用统一的驼峰风格(CamelCase),具体规则如下:

类别 命名风格 形式
函数、结构体、枚举等 大驼峰 AaaBbb,XXX_AaaBbb
局部变量、参数、结构体成员 小驼峰 aaaBbb
全局变量 带”g_“的小驼峰 g_aaaBbb
宏、枚举值、goto标签、函数宏 全大写,下划线分割 AAABBB,AAA_BBB

尽量遵循openHiTLS工程已有风格,如:

协议模块

  • 对外接口:HiTLS_Read HiTLS_前缀+接口名
  • 模块接口:CCS_Init 模块名+接口名

算法模块

  • 对外接口:CRYPT_EAL_KdfNewCtx CRYPT_EAL_前缀+接口名
  • 模块接口:CRYPT_HKDF_NewCtxEx CRYPT_HKDF_前缀+接口名

注释

/* *///均可,注释内容需与注释符保留一空格,注释应贴近被注释内容,处于起上方或后边。 建议 /* */用于多行注释,//用于单行注释。

为保持统一,注释需采用英文。

格式

编码

统一使用utf-8编码。 换行符使用\n

缩进

使用4空格缩进。

大括号

大括号换行使用K&R风格。函数定义的左大括号另起一行放行首,并独占一行,其他左大括号跟随代码放行末。

行宽

行宽不宜超过120字符。 换行时将操作符置于行末,新行缩进一层或进行同类对齐。例如

int x = a + b .... +
        c;

语句

  • 条件、循环语句使用大括号。
  • 指针类型‘*’跟随变量或函数名。
  • case/default相对于switch缩进一层。例如
switch (c) {
    case a:
        do_a();
        break;
    case b:
        do_b();
        break;
    ...
    default:
        break;
}

空格和空行

空格应突出关键字和重要信息,建议如下:

  • 行末不加空格。
  • if,switch,for,do,while等关键字后跟一空格。
  • 小括号内两侧无空格。
  • 一元操作符后无空格。
  • 二元操作符前后有一空格。
  • 结构体成员操作符前后无空格。
  • 函数名与参数列表间无空格。
  • 强制转换小括号与被转换对象间无空格。
  • 数组名与中括号间无空格。

保持代码紧簇,避免过多空行。应根据上下内容关联程度合理使用空行。

clang-format

建议在提交代码前使用clang-format工具结合代码仓下的.clang-format配置文件格式化代码。

使用举例:

# 跳转至openHiTLS代码仓根目录
clang-format -i bsl/base64/src/bsl_base64.c