原则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
}
- 第一章 概述
- 1.1规范制定原则
- 1.2 术语定义
- 1.3 文件命名组织
- 1.3.1文件命名
- 1.3.2文件注释
- 第二章 编码风格
- 第三章 注释
- 3.1 注释概述
- 3.2 文档型注释
- 3.3 类c注释
- 3.4 单行注释
- 3.5 注释标签
- 第四章 声明
- 4.1每行声明数
- 4.2初始化
- 4.3位置
- 4.4类和接口的声明
- 4.5字段的声明
- 第五章 命名规范
- 5.1命名概述
- 5.2大小写规则
- 5.3缩写
- 5.4命名空间
- 5.5类
- 5.6接口
- 5.7属性 (Attribute)
- 5.8枚举 (Enum)
- 5.9参数
- 5.10方法
- 5.11属性 (property)
- 5.12事件
- 5.13 常量 (const)
- 5.14 字段
- 5.15 静态字段
- 5.16 集合
- 5.17 措词
- 第六章 语句
- 6.1每行一个语句
- 6.2 复合语句
- 6.3 return 语句
- 6.4 if、 if-else、if else-if 语句
- 6.5 for、foreach 语句
- 6.6 while 语句
- 6.7 do - while 语句
- 6.8 switch - case 语句
- 6.9 try - catch 语句
- 6.10 using 块语句
- 6.11 goto 语句
- 第七章 函数与类
- 第八章 内存分配和释放
- 第九章 兼容性
- 第十章 控件命名规则
- 10.1 命名方法
- 10.2 主要控件名简写对照表
- 附录一: 匈牙利命名法