c++代码规范(个人)

c++开发规范

1 命名规范

1-1 类型命名

[Standards] 遵照 帕斯卡(pascal) 命名法

(1) class

/* 抽象类,'A'打头,如:ASharedPtr,
 * 注:由于class放在命名空间中,所以类名称中不需要再追加项目名和模块名前缀
 * 如:class AAlgorithm;
 */
class AXxxYyy;

/** 接口类,'I'打头,如:ISharedPtr 
 * 如:class IAlgorithm;
 */
class IXxxYyy;

/** 普通类,'C'打头,如:CSharedPtr,名字中有缩写时,如"CSV",将之看做一个词汇首字母大写即"Csv",
 * 如:class CCsvReader;
 */
class CXxxYyy;

(2) struct/union/enum

[Standards] POD对象遵循全大写命名,并使用typedef tag…重命名,是为了方便调试

/** 仅内部使用的POD对象
 * 如:
 * struct FOO_TYPE {}; 
 */
typedef struct tagXXX_YYY {
} XXX_YYY, *LPXXX_YYY;

[Standards] 仅内部使用POD,不允许匿名内嵌POD对象,嵌套POD对象使用"INNER"前缀,如:

typedef struct tagXXX_YYY {
    struct INNER_ZZZ_KKK{};
} XXX_YYY, *LPXXX_YYY;

[Standards] 外部使用POD对象,需要加上项目名,追加模块名;且不允许内嵌POD对象,如:

/**
 * 如:PUMP-项目名,MEM-模块名
 * typedef struct tagPUMP_MEM_POD_TYPE {
 * } PUMP_MEM_POD_TYPE,*LPPUMP_MEM_POD_TYPE;
 */
typedef struct tagXXX_YYY_ZZZ_KKK {
} XXX_YYY_ZZZ_KKK, *LPXXX_YYY_ZZZ_KKK;

1-2 变量命名

[Standards] 普通变量名,遵守 匈牙利命名法 规范,增加变量类型前缀。变量的名字应当使用“名词”或者“形容词+名词”。

(1) 类型前缀

前缀说明
ch字符类型char
by无符号字符unsigned char
szchar*
s短整数类型short int
wunsigned short (WORD)
n整数类型int
dwunsigned int (DWORD)
l长整数类型long int
ulunsigned long
lllong long
ullunsigned long long
b布尔型变量bool
f单浮点型变量float
d双浮点型变量double
ld长双浮点型变量long double
objclass实例
strustruct实例
ununion实例
emenum实例
h句柄,文件描述符
pfn函数指针
str字符串string
vecstd::vector
setstd::set
lststd::list
mapstd::map
stakstd::stack
it迭代器
arrarray, 如:int arrNum[10]
p指针变量,如:void * pData; int * pNum;
pp二重指针
k全局/静态常量,如:const char* kDeviceId = “NVR-DS-0294jk928”;

(2) 作用域前缀

前缀说明
g_全局变量 (注:google规范不建议使用非POD对象作为全局栈上对象)
m_成员变量
s_局部静态变量, static
sg_静态全局变量
sm_静态成员变量
gg_进程共享

(3) 复合类型成员变量命名

[Standards] class 对象成员变量,必须以"m_"作为前缀,类静态成员则"sm_"前缀打头,变量名称须复合匈牙利命名法

class CTestType
{
private:
    int m_nNum;
    DeviceInfo m_objDevInfo;
    const char* m_szIp;
};

[Standards] struct/union 对象成员以"_"为后缀,变量名称须复合匈牙利命名法

typedef struct tagDEVICE_INFO
{
    int nNum_;
    int nX_;
    char * szIp_;
} DEVICE_INFO, *LPDEVICE_INFO;

1-3 接口命名

(1) 内部接口

[Standards] 遵照 帕斯卡(pascal) 命名法,应当使用"动词"或者"动词+名词"(动宾词组)的形式, 参数最找普通变量命名即可

/**
 * 如:
 * void GetGlobalConfig(const char * szBuf, int nNum);
 */
RetType XxxYxxZzz(...);

(1) 外部接口

[Standards] 采用类似于外部POD对象的命名方式,追加全大写项目名,模块名前缀

/**
 * 如:
 * void PUMP_CONF_GetGlobalConfig();
 */
RetType XXX_YxxZzz(...);

(3) 类对象成员函数

[Standards]

  • 类成员函数应当只使用“动词”或“动词”+“名词”,被省略掉的名词就是对象本身。例如:“box->Draw();”。
  • 保护成员函数:开头应当加上一个下划线“_”以示区别,例如:"_SetState()"
  • 私有成员函数:开头应当加上两个下划线“__”,例如:"__DestroyImp()"
  • 虚函数:习惯以“Do”开头,如:“DoRefresh()”, “_DoEncryption()”
  • 回调和事件处理函数 :习惯以单词“On”开头。例如:"_OnTimer()", “OnExit()”
class CPerson
{
public:
    void SetName(const char *szName, size_t dwSize);
    void GetName(char *szName, size_t *dwSize);
protected:
    virtual void _DoEatFood(int nNum);
private:
    void __GetEmotion(int * nLevel);
    void __OnSocializing(const char* szMsg);

private:
    char m_szName[32];
};

2 注释规范

待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值