🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
原则1: 遵守ANSIC和ISO C++国际标准 原则2: 将不符合国际标准的代码与其他代码分开 原则3: 运算时显式转换有符号和无符号类型 例子 unsigned long possitionA; unsigned long possitionB; //… long distance=long (possitionA) – long (possitionB); 原则4: 恰当使用位操作符 说明 只有绝对需要时,才使用位操作符,比如操作硬件寄存器时。 原则5:不要强制引用/指针指向尺寸不同的目标 例子 int badFunction (const char* pChar) { // 危险 int*PInt= (const int*)pChar; return (*PInt); } 原则6: 确保类型转换不会丢失信息 例子 // 在大多数环境下,函数fork()的返回值大于short的长度,从而导致信息丢失 short pid=fork(); 原则7: 不要假设类型的存储尺寸 说明 诸如整型、长整、短整、浮点数、双精浮点数等的内存尺寸依系统不同而不同:而指向不同类型的指针也不能保证尺寸一定一样()。 例子 / * * 假设整型的内存尺寸为4个字节,并据此申请内存,一旦 * 运行平台改变,而新的运行平台的整型尺寸不同(比如64 * 位平台应是8个字节而不是4个字节),则需要直接修改代 * 码,兼容性不好 * / buffer=new char[4*length]; / * * 让编译器在编译时计算(通过sizeof())要灵活得多,因 * 为编译器在计算时会根据不同平台的要求给出相应的值 * / buffer=new char[sizeof(int)*length]; 原则8: 不要假设对象(等数据结构)的存储结构 原则9: 注意运算溢出问题 例子 short abs (short n) { if (n<0) { n= -n; / * * 短整型的范围是-32768到+32767,当n=-32768时, * -n就溢出了 * / } return n; } 原则10: 不要假设表达式的运算顺序 例子 int x= ( (getchar()<<24) | (getchar()<<16) | (getchar()<<8) | (getchar() ) }; 原则11: 不要假设函数参数的计算顺序 例子 int array[]={1,2,3,4}; int* PArray=&array[0]; / * * 不同编译器,执行结果可能不同,有可能是 * function (1,2),也可能是function(2,1) * / function (*PArray++,*pArray++); 原则12: 注意数据文件的兼容性 说明 1) 字节排列顺序: 有的系统从右向左组织字节,有的是从左向右:网络传输数据也存在同样问题:有的系统先传数据的低字节,有的先传高字节:(现在有标准函数可以做转换,请查阅操作系统的相关文档)。 2) 数据对齐: 为了保证访问效率,数据存放也采用不同的对齐格式,比如字对齐或双字对齐等,所以可能会有无用的空隙插在相邻数据之间,编程者也需留神。 3) 行尾标志: 有的系统用回车做行尾(比如一般的UNIX系统),有的用回车换行两个字符做行尾(比如Windows系列)。 原则13: 注意引用公共库的兼容性 说明 尽量选择兼容性好(支持多平台)的库。一般来说,标准库要好于系统库(操作系统提供的)或自定义库,因为它们是经过精心设计以保证兼容性、高效性等一系列需求的。 原则14: 一定不要重新实现标准库函数 例子 // 自己实现memcpy() void*memcpy (void*pDes,void*pSrc,size_t length) { //… } 原则15: 将所有#include的文件名视为大小写敏感 原则16: 确保main()函数总是返回一个整型 例子 int main (int arp,char*argv[]) { int status=0; //… return status; // return appropriate status }