C++代码规范及详解.docx
编程规范1、文件结构(1)、头文件注释需要有版权信息、类名称、版本信息、日期、作者、类职责。(2)、头文件需要用ifndef和define,防止重复包含。(3)、尽量使用前向声明。(4)、头文件包含应先包含系统文件、再包含自定义文件。(5)、文件组织方式应该遵循文件包含、宏、全局变量和静态成员变量顺序。2、标识符(1)、标识符应表示出含义,如果是变量,类的成员和全局变量,还要表示出类型、作用域和含义。命名尽量采用“名词”或者“形容词” + “名词”格式。命名格式采用匈牙利命名法。(2)、变量必须初始化。(3)、指针必须初始化为nullptr,使用时必须判空,释放后必须置空,防止野指针。(4)、判断二时常量放在左边。3、代码规范(1)、采用Tab键来缩进,每嵌套一级缩进一个Tab, “ ”需保持缩进对齐。(2)、头文件和实现文件中函数之间需要空行。(3)、一行代码只做一件事。(4)、关键字后跟一个空格。(5)、函数名之后不加空格。(6)、操作符前后加空格(除+、-、&、!、外)。(7)、长行拆分。(8)、表达式以“()”表示优先级。(9)、一个函数内局部变量赋值等号对齐(Tab对齐)。4、类(1)、包含指针类型的需实现赋值操作符和拷贝构造函数。(2)、分配和释放空间必须成对出现(QObject子类设置了父对象的不用)。(3)、成员初始化顺序应和成员声明顺序保持一致。(4)、尽可能使用初始化列表来初始化成员变量。(5)、尽量防止使用静态成员变量和全局变量降低耦合。(6)、非POD结构不要用memset初始化对象。(7)、尽量多用组合,少用继承。(8)、数据结构体必须加构造函数。5、函数(1)、添加注释,包括概述、返回值、参数(接口必写,内部关键函数必写)。(2)、函数功能尽量单一。(3)、函数命名用全称,首字母小写,多个单词组合的采用驼峰式命名。(4)、函数声明中参数名称不可省略。(5)、参数顺序以先传入类型,后返回类型。(6)、函数实参传递过程中防止无意义的临时变量(尽量用常量引用和引用,引用是需耍修改原值)。(7)、函数尽量短小、易懂,尽量保持200行以内。(8)、函数只能有一个返回路径。(9)、尽量设计少调用其他函数,多被其它函数调用的函数。(10)、尽量防止递归调用。(12)、函数返回值时防止临时先用局部变量暂存数据再返回。(13)、函数形参多的尽量给默认值,默认值放到后面。6、其它(1)、硬编码字符串必须加tr。(2)、编码过程中不能出现警告。(3)、不要使用C风格的强制类型转换操作。编程规范4、文件结构(1)、头文件注释需要有版权信息、类名称、版本信息、日期、作者、类职责。* version : 1. 0* Copyright : Copyright (c) 2017,北京亚控科技开展有限公包.* fi 1 cnamc : Codel'orni. h* L* 'version: 1.0* anlIior:change:* 2.0* eiuthor:chcinge:* author:W A P* contcict:iiserc()nipciriy. com,1* bricf :* note :*(2)、头文件需要用ifndef和define,防止重复包含。pifndef CodeForm_h_#define CodeForm_h#endif / CodeFormh(3)、尽量使用前向声明。(4)、头文件包含应先包含系统文件、再包含自定义文件。(5)、文件组织方式应该遵循文件包含、宏、全局变量和静态成员变量顺序。5、标识符(1)、标识符应表示出含义,如果是变量,类的成员和全局变量,还要表示出类型、作用域和含义。命名尽量采用“名词”或者“形容词” + “名词”格式。命名格式采用匈牙利命名法。前缀类型描述例子g_Global Variableg_Serversm_Member variablem_pDocchchar8-bit characterchGradebBOOLBoolean valuebEnablednintInteger (size dependent on operating system)nLengthnUINTUnsigned value (size dependent on operating system)nLengthwWORD16-bit unsigned valuewPos1LONG32-bit signed integer1 OffsetdwDWORD32-bit unsigned integerdwRangeP*pointerpDoceEnumerate value variableIpszLPSTR32-bit pointer to character stringIpszNameIpfn(*fn)()callbackFar pointer to CALLBACK functionIpfnAbortszNullTerminated Stringchar szNameNAME LEN;strC+ Stringstring strFirstName;ptCPointPoint class objectmapmapmapUserlistlistsstaticsTeststrustructconstconstvecvectorVector class object(2)、变量必须初始化。(3)、指针必须初始化为nullptr,使用时必须判空,释放后必须置空,防止野指针。(1)、采用Tab键来缩进,每嵌套一级缩进一个Tab, “ ”需保持缩进对齐。(2)、头文件和实现文件中函数之间需要空行。(3)、一行代码只做一件事。int nWidth = 1;int nHeight = 1;|(4)、关键字后跟一个空格。for (int nldx = 0; nldx < 100; +nldx)if (nullptr 二二 pPointer)(5)、函数名之后不加空格。inline void add(const int& nParal, const int& nPara2);(6)、操作符前后加空格(除+、一、&、!、外)。strResult +二 strParameter;(7)、长行拆分。|if (m二匹:onfig.Rg£Q£dState & PRINTER_ALARM) 0)&& (ni pConfig. RecordState & DB ALARM) <= 0)&& (m_pConf£g. RecordState & PRTNTER_ENTER) 0)&& (m_pConfig. RecordState & DB_ENTER)二 0)&& (in pConfig. RecordState & PRINTER OPERATC) <= 0)&& (m_pConfig. RecordState & DB_OPERATE) <= 0)(9)、一个函数内局部变量赋值等号对齐(Tab对齐)。7、类(1)、包含指针类型的需实现构造函数、赋值操作符、拷贝构造函数、析构函数。class Stringpub lie:String (const char* str = NULL);默认构造函数String(const String &other);拷贝构造函数Stringfe operator= (const Stringfe other);赋值构造函数private:char用于保存字符串(2)、分配和释放空间必须成对出现(QObject子类设置了父对象的不用)。(3)、成员初始化顺序应和成员声明顺序保持一致。(4)、尽可能使用初始化列表来初始化成员变量。(5)、尽量防止使用静态成员变量和全局变量降低耦合。(6)、非POD结构不要用memset初始化对象。POD结构:将对象的各字节拷贝到一个字节数组中,然后再将它重新拷贝到原先的对象所占的存储区中, 此时该对象应该具有它原来的值。POD数据结构主要是兼容之前C结构,即破坏对象布局的就是非POD。(7)、尽量多用组合,少用继承。(8)、数据结构体必须加构造函数。typedef struct kvUserSecurityPropertylstd: vector<short> SecurityZonelDs;安全IXID集合shortPriorityLevel;优先级|kvUserSecurityProperty()kvUserSecurityPropertyfe operator =(const kvUserSecuri tyProperty& UserSecProperty)8、函数(1)、添加注释,包括概述、返回值、参数(接口必写,内部关键函数必写)。(2)、函数功能尽量单一。(3)、函数命名用全称,首字母小写,多个单词组合的采用驼峰式命名。void setEditorData(QWidget editor, const QModelIndex &index) const;(4)、函数声明中参数名称不可省略。(5)、参数顺序以先传入类型,后返回类型。int& nResult);void add(const int& nParal, const int& nPara2,(6)、函数实参传递过程中防止无意义的临时变量(尽量用常量引用和引用,引用是需要修改原值)。const CustomWi dgetfe obj2);CustomWidget add(const CustomWidgetfe objl,(7)、函数尽量短小、易懂,尽量保持200行以内。(8)、函数只能有一个返回路径。(9)、尽量设计少调用其他函数,多被其它函数调用的函数。(10)、尽量防止递归调用。(12)、函数返回值时防止临时先用局部变量暂存数据再返回。std:string testReturn () h b" bd return szBuff;防止std:string testReturn () hstd:string strResult(szBuff); return strResult;(13)、函数形参多的尽量给默认值,默认值放到后面。 9、其它(1)、硬编码字符串必须加tr。(2)、编码过程中不能出现警告。(3)、不要使用C风格的强制类型转换操作。使用 C+类型转换:dynamic_cast> static cast> const casto