当前位置:首页 > C++编程规范-华为-Word文档-已整理过-07-my04
3. 建议12.2 避免指针截断 .......................................................................................................... 50 4. 建议12.3 注意数据类型对齐问题........................................................................................... 50 5. 建议12.4 在涉及网络字节序处理时,要注意进行网络字节序与本地字节序的转换 ....... 50 6. 建议12.5 避免无符号数与有符号数的转换 ........................................................................... 51 7. 建议12.6 创建64 位常量时使用LL 或ULL 作为后缀 ...................................................... 51 8. 建议12.7 区分sizeof(void *)和sizeof(int) ............................................................................... 51 9. 建议12.8 编译器、操作系统相关的代码独立出来 ............................................................... 51
1.14 13全球化 ................................................................................................................................................ 52
1.14.1 13.1 多语言输入输出 ............................................................................................................... 52
1. 原则13.1 使用正确的数据类型和类处理多语言字符和字符串 ........................................... 52 2. 原则13.2 对字符进行处理时,需分配足够的内存空间并确保字符完整 ........................... 52 3. 规则13.1 使用标准库函数判断字符属性,使应用能够支持多区域 ................................... 52 4. 规则13.2 对字符串进行本地化排序、比较和查找时,使用有区域参数的locale::collate<>函数 ................................................................................................................................................. 52 5. 建议13.1 处理Unicode数据时,注意检测BOM是否存在,避免产生多余字符或解码错误 ......................................................................................................................................................... 53 1.14.2 13.2 单一版本 ............................................................................................................................. 53
1. 规则13.3 资源与程序逻辑代码分离 ....................................................................................... 53 2. 规则13.4 保持资源的语义完整性,不要拼接字符串资源 ................................................... 53 3. 建议13.2 资源的键名中包含该资源的应用场景信息 ........................................................... 54 1.14.3 13.3 时区夏令时 ......................................................................................................................... 54
1. 规则13.5 确保本地时间中时区夏令时信息完整 ................................................................... 54 2. 规则13.6 避免使用本地时间直接进行时间计算 ................................................................... 54
1.15 14业界编程规范和书籍 ........................................................................................................................ 55
1.15.1 14.1 业界编程规范 ..................................................................................................................... 55
1. 14.1.1 《google C++ code style》(google C++编程指南) ........................................................ 55 2. 14.1.2 《C++编程规范101条规则、准则与最佳实践》 ....................................................... 55 3. 14.1.3 Microsoft All-In-One Code Framework 《微软一站式示例代码库》 ........................ 55 1.15.2 14.2 扩展学习材料 ..................................................................................................................... 56
1. 14.2.1 C++ primer ........................................................................................................................ 56 2. 14.2.2 effective C++ / more effective C++ .................................................................................. 56 3. 14.2.3 Effective STL .................................................................................................................... 56 4. 14.2.4 inside the C++ object model ............................................................................................. 56
1.1 C++编程规范 总则
1.1.1 资料来源
http://blog.csdn.net/xiyoulele/article/details/7987123
分类: 编码规范 C/C++ 2012-09-17 12:49 101人阅读 评论(0) 收藏 举报 编程c++
C++编程规范专辑:
http://blog.csdn.net/xiyoulele/article/category/1213983
1.1.2 C++编程规范 总则
1. 原则:编程时必须坚持的指导思想。 2. 规则:编程时强制必须遵守的约定。 3. 建议:编程时必须加以考虑的约定。 4. 说明:对此原则/规则/建议进行必要的解释。
5. 示例:对此原则/规则/建议从好、不好两个方面给出例子。 6. 延伸阅读材料:建议进一步阅读的参考材料。
1.2 C++ 编程规范 1 常量
1.2.1 资料来源
http://blog.csdn.net/xiyoulele/article/details/7987126
分类: C/C++ 编码规范 2012-09-17 12:50 369人阅读 评论(2) 收藏 举报 c++编程session编译器工作手机
1.2.2 C++ 编程规范 1 常量
不变的值更易于理解、跟踪和分析,所以应该尽可能地使用常量代替变量,定义值的时候,应该把const 作为默认的选项。
1. 规则1.1 使用const常量取代宏
说明:宏是简单的文本替换,在预处理阶段时完成,运行报错时直接报相应的值;跟踪调试时也是显示值,而不是宏名;宏没有类型检查,不安全;宏没有作用域。
示例:
#define MAX_MSISDN_LEN (20) //不好的例子 const int MAX_MSISDN_LEN = 20; //好的例子
2. 规则1.2 一组相关的整型常量应定义为枚举
说明:之所以使用枚举,基于:
枚举比#define或const int更安全,因为编译器会检查参数值是否位于枚举取值范围内,从而避免错误发生。
示例:
//好的例子:
enum DayOfWeek{sunday,monday, tuesday, wednesday, thursday, friday, saturday}; enum Color{black, blue, white, red, purple};
BOOL ColorizeCalendar(DayOfWeek today, Color todaysColor); ColorizeCalendar(blue, sunday); //编译报错,Blue和Sunday位置错误
//不好的例子: const int sunday = 0; const int monday = 1; const int black = 0; const int blue = 1;
BOOL ColorizeCalendar(int today, int todaysColor); ColorizeCalendar(blue, sunday); //不会报错
当枚举值需要对应到具体数值时,须在声明时显示赋值。否则不需要显式赋值,以避免重复赋值,降低维护(增加、删除成员)工作量。
示例:
//好的例子:S协议里定义的设备ID值,用于标识设备类型 enum TDeviceType {
DEV_UNKNOWN = -1, DEV_DSMP = 0, DEV_ISMG = 1, DEV_WAPPORTAL = 2 };
程序内部使用,仅用于分类的情况,不应该进行显式的赋值。 示例:
//好的例子:程序中用来标识会话状态的枚举定义 enum TSessionState {
SESSION_STATE_INIT, SESSION_STATE_CLOSED,
SESSION_STATE_WAITING_FOR_RSP };
应当尽量避免枚举值重复,如必须重复也要用已定义的枚举来修饰,例如:
typedef enum {
RTCP_SR = 200,
RTCP_MIN_TYPE = RTCP_SR, //must be lowest known type RTCP_RR = 201, RTCP_SDES = 202, RTCP_BYE = 203, RTCP_APP = 204, RTCP_RTPFB = 205, RTCP_PSFB = 206, RTCP_XR = 207, RTCP_RSI = 208, RTCP_PUBPORTS = 209,
RTCP_MAX_TYPE = RTCP_PUBPORTS //must be highest known type } rtcp_type_t;
3. 规则1.3 不相关的常量,即使取值一样,也必须分别定义
说明:一个常量只用来表示一个特定功能,即一个常量不能有多种用途。 示例:
//好的例子:协议A和协议B,手机号(MSISDN)的长度都是20。 unsigned const int A_MAX_MSISDN_LEN = 20; unsigned const int B_MAX_MSISDN_LEN = 20; //或者使用不同的名字空间:
namespace alib {
unsigned const int MAX_MSISDN_LEN = 20; }
namespace blib {
unsigned const int MAX_MSISDN_LEN = 20; }
4. 建议1.1 尽可能使用const
说明:在声明的变量或参数前加上关键字const用于指明变量值不可被篡改。类成员函数加上const限定符表明该函数不会修改类成员变量的状态。
使用const常见的场景:
A. 函数参数:传递引用时,如果函数不会修改传入参数, 该形参应声明为const。
B. 成员函数:访问函数(如get函数);不修改任何数据成员的函数;未调用非const函数、未返回数据成员的非const指针或引用的函数。
C. 数据成员:如果数据成员在对象构造之后不再发生变化, 可将其定义为const。
1.3 C++编程规范 2 初始化和类型转换
资料来源:
http://blog.csdn.net/xiyoulele/article/details/7987132
分类: C/C++ 编码规范 2012-09-17 12:52 471人阅读 评论(0) 收藏 举报 编程c++编译器classstringemail
1.3.1 2.1 声明、定义与初始化
1. 规则2.1 禁止用memcpy、memset初始化非POD对象
说明:POD 全称是“Plain Old Data”,是C++ 98标准(ISO/IEC 14882, first edition, 1998-09-01)中引入的一个概念,POD类型主要包括int, char, float,double,enumeration,void,指针等原始类型及其集合类型,不能使用封装和面对对象特性(如用户定义的构造/赋值/析构函数、基类、虚函数等)。
由于非POD类型比如非集合类型的class对象,可能存在虚函数,内存布局不确定,跟编译器有关,滥用内存拷贝可能会导致严重的问题。
即使对集合类型的class,使用直接的内存拷贝和比较,破坏了信息隐蔽和数据保护的作用,也不提倡memcpy、memset操作。
示例:×××产品程序异常退出(core dump)。
经过现场环境的模似,程序产生COREDUMP,其原因是:在初始化函数内使用memset(this, 0,sizeof(*this))进行了类的初始化,将类的虚函数表指针被清空,从而导致使用空指针。
解决方案:使用C++构造函数初始化,不要使用memset函数初始化类对象。
2. 建议2.1 变量使用时才声明并初始化
说明:变量在使用前未赋初值,是常见的低级编程错误。使用前才声明变量并同时初始化,非常方便地避免了此类低级错误。
在函数开始位置声明所有变量,后面才使用变量,作用域覆盖整个函数实现,容易导致如下问题: 程序难以理解和维护:变量的定义与使用分离。
变量难以合理初始化:在函数开始时,经常没有足够的信息进行变量初始化,往往用某个默认的空值(比如零)来初始化,这通常是一种浪费,如果变量在被赋于有效值以前使用,还会导致错误。
共分享92篇相关文档