c++编码规范(待续)

变量的命名

变量名称 = 作用域+类型+含义

作用域命名
全局变量g_
类成员变量m_
静态变量s_
进程共享全局变量gg_
局部变量
类型命名
指针p
函数fn
无效v
句柄h
长整型l
布尔b
浮点型f
双字节dw
字符串sz
短整形n
双精度浮点型d
计数cnt
单个字符ch
整形i
字节by
w
无符号u
句柄h
窗口句柄hWnd
含义开头命名
最大Max
最小Min
初始化Init
临时变量Temp
源对象Src
目标对象Dst

举例

g_pfnUtf8ToUnicode
命名结构为: g_ + p + fn + Utf8ToUnicode
含义:这是一个名称为Utf8ToUnicode全局 函数 指针

hWndShadowWater
命名结构为: + hWnd + ShadowWater
含义: 这是一个名称为ShadowWater局部 窗口句柄

命名遵循原则

  1. 变量名长度遵循“min-length && max-information”的原则
  2. 变量名直观且可以拼读,望文知意
  3. 命名规则尽量与所采用的操作系统或开发工具的风格保持一致
  4. 程序中不要出现仅靠大小写区分的相似的标识符
  5. 程序中不要出现标识符完全相同的局部变量和全局变量,尽管两者的作用域不同而不会发生语法错误,但会使人误解
  6. 变量的名字应当使用“名词”或者“形容词+名词
  7. 尽量不要使用全局变量
  8. /常量/枚举/结构体全部使用大写的字母,用下划线分割单词
  9. 用正确的反义词组命名具有互斥意义的变量或相反动作的函数等
  10. 类名和函数名用大写字母开头的单词组合而成
  11. 类的实例变量名采用类名的简写+含义构成
  12. 结构体定义时采用typedef的方式定义,需同时定义结构体结构体指针
  13. 类名必须以大写字母开头,且不能包含下划线

注释

文件注释

  1. 在新建一个文件时,需包含文件注释,示例如下:
    / *
    * 文件名:[文件名]
    * 作者:〈版权〉
    * 描述:〈描述〉
    * 修改人:〈修改人〉
    * 修改时间:YYYY-MM-DD
    * 修改内容:〈修改内容〉
    * /
    
    每次修改之后,需要写下本次修改信息,示例如下:
    / *
    * 文件名:LogManager.java
    * 版权:周伯通
    * 描述: WIN V200R002 WEBSMAP 通用日志系统
    * 修改人:张三
    * 修改时间:2001-02-16
    * 修改内容:新增
    * 修改人:李四
    * 修改时间:2001-02-26
    * 修改内容:。。。。。。
    * 修改人:王五
    * 修改时间:2001-03-25
    * 修改内容:。。。。。。
    * /
    

函数注释

  1. 函数的头部注释,建议包含的项为:函数名,功能,输入参数,输出参数,返回值,注意事项等, 举例如下:
    / *
    * 函数名:UnicodeToUtf8
    * 作者:周伯通
    * 描述:将Unicode字符数组转化为utf8字符数组输出
    * 入参:szUnicodeArray: 带转化的Unicode字符串
    * 	   dwUtf8Buff:	转化出去的Utf8缓冲区的最大字符长度
    * 出参:szUtf8Array: 转化完成的Utf8字符串存放地址
    * 返回值: bRet: 转化成功为TRUE,失败为FALSE
    * 注意事项:当缓冲区长度不够时,将会设置错误码为DRM_ERROR_SMALLBUFFER
    * /
    

注释代码

  1. 当注释/修改功能代码时,需在被注释代码前面(不包含空行)记录注释原因, 举例如下:
    ##Delete by 周伯通  2018-11-19  for 将上传日志功能另起Timer执行,见TimerProcUpload
    ##Modify by 周伯通  2018-11-19  for 将上传日志功能另起Timer执行,见TimerProcUpload
    
    注释多行代码时, 举例如下
    / * Delete by 周伯通 2018-11-19 for 将上传日志功能另起Timer执行,见TimerProcUpload
    要注释的代码
    要注释的代码
    要注释的代码
    Delete by 周伯通 2018-11-19 */
    
  2. 当代码被注释后,经过两个版本测试通过后,除非必要,否则需删除被注释的代码

函数的约定

函数的定义

  1. 函数的定义在申明和定义时都加上参数的逻辑入参/逻辑出参标记,举例如下
    BOOL bRet UnicodeToUtf8(_In_ LPCTSTR szUnicodeArray, _Out_ LPTSTR szUtf8Array, _In_ DWORD dwUtf8BufferSize);
    
  2. 函数中如果不会对参数进行写操作时,必须要在申明和定义时显式或隐式的添加const关键字,举例如下:
    //隐式
    BOOL bRet UnicodeToUtf8(_In_ LPCTSTR szUnicodeArray, _Out_ LPTSTR szUtf8Array, _In_ DWORD dwUtf8BufferSize);
    //显式
    BOOL bRet UnicodeToUtf8(_In_ const LPTSTR szUnicodeArray, _Out_ LPTSTR szUtf8Array, _In_ DWORD dwUtf8BufferSize);
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值