1、 程序排版的技巧
·巧妙使用空行
空行得体,可以使程序的布局更加清晰。在类的声明之后,在每个函数的声明之后,一般都要加空行。在函数体内,逻辑关系密切的语句之间不要加空行分开。
·代码行的书写规范
每行代码行只完成一件事情,比如声明一个变量,完成一个运算。在关键字后面加空格,以突出关键字。
·缩进对齐
缩进是一种良好的代码风格,缩进得当能够很清晰地体现结构化程序的逻辑关系。一般在{}内的内容,for、while循环的内容,if语句的内容,要缩进一个Tab位。对于VC可视化编程环境,可选定要排版的内容,然后同时按下【Alt+F8】组合键,代码自动按照标砖格式重新排列。
·长行拆分
代码的长度不宜过长,要不然程序读起来比较吃力,一般一行控制在70~80个字符即可。
2、添加注释的技巧
C++语言的注释符为“/*……*/”,行注释一般采用“//……”,注释通常用于:
·版本、版权声明
·函数接口说明
·重要代码行或段落提示
添加注释注意的事项:
·注释量要达到代码量的40%。
·注释的位置应与被描述的代码相邻,可以放在代码的上方或右方,不可放在下方。
·在每个函数定义前加一个恰当的函数说明(函数头),描述该函数的功能、参数、返回值、注意事项和修改记录等。
·边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性,不在有用的注释要删除。
·尽量避免在注释中使用缩写,特别是不常用的缩写。
·当代码比较长,特别是有多重嵌套时,应当在一些段落的结束加注释,便于阅读。
eg.函数接口的说明
/**//**//**//*
*函数功能介绍
*输入参数意义介绍
*输出参数意义介绍
*返回值功能说明
*函数最近修改时间
*函数创建人或者最近修改人姓名
*原始与修改后的代码
*/
void Function(float x, float y, float z){
DoSomething();
}
3、 标识符命名的技巧
变量的名字一般包含变量的生命周期、变量的数据类型、变量的作用等,变量时全局变量还是局部变量,是整型变量还是字符型变量。函数的命名通常利用“动词+名词”的方式命名,其中每个词的首字符大写,这一组合能够表明该函数的作用。类命名一般采用单个词组来命名,表明某个对象的抽象,首字符一般大写。
·望文生义
标识符的命名由英文单词组合而成,程序员读者从标识名字中判断该标识的含义。通常全局变量以g_为前缀,成员变量以m_为前缀,静态变量以s_为前缀,指针类型以p为前缀等。
·清晰明了
长的标识符带有更多的信息量,能够更好表达其含义。但是标识符命名并非越长越好。长了反而显得繁琐。
·避免歧义
标识符的歧义通常让阅读程序的人产生误解,应该尽量避免。避免使用仅靠大小写区分的标识符。不要出现不同作用域、相同名字的标识符,虽然在编译和执行的时候不会出现错误,但是大大降低了程序的可读性。
4、 复合表达式的书写技巧
复合表达式是由变量、常量、函数调用和运算符组成。
C++里面运算符的优先级和结合型,运算符从上之下按优先级降低的顺序排列。
运算符
|
结合性
|
()、[]、—>、.
|
从左至右
|
++、--、-(负)、+(正)、!、~、(类型)、*(指针)、&、sizeof
|
从右至左
|
*(乘以)、/、%
|
从左至右
|
+、-
|
从左至右
|
<<、>>
|
从左至右
|
<、<=、>、>=
|
从左至右
|
==、!=
|
从左至右
|
&
|
从左至右
|
^
|
从左至右
|
|
|
从左至右
|
&&
|
从左至右
|
||
|
从左至右
|
?:
|
从右至左
|
=、+=、-=、*=、/=、%=、&=、^=、|=、<<=、>>=
|
从右至左
|
,
|
从左至右
|
复合表达式的书写技巧
复合表达式书写简洁,可以提高编译效率,其书写一般遵守的规则如下:
·不要编写太复杂的复合表达式
·不要有多用途的复合表达式
·不要把程序中的复合表达式与“数学表达式”混淆
另外,复合表达式有一个特性,如果表达式的值确定为真,那么表达式的计算就会停止。这意味着表达式中有部分很可能没有参加运算。
5、 if语句的书写技巧
(1)if语句检验条件通常将常量放在条件表达式的左侧
#include<iostream.h>
//主函数
int main(){
char* pchName=new char[20];
if(Null==p)//注意,其检验条件放在左侧{
cout<<”Memory Allcated Failed”<<endl;
exit(0);
}
}
这样写的原因是为了防止将if(p==NULL)写成if(p=NULL),编译器认为if(p=NULL)是合法的,而if(NULL=p)编译器则认为是非法的。
(2)与零值的比较
·布尔变量与零值的比较
布尔变量是有两种逻辑状态的变量,它包含两个值:真和假。如果在算术表达式中使用布尔变量,那么将根据布尔变量值的真假而赋予整型值1或0。要把一个整型变量转换成布尔型变量,如果整数值为0,则其布尔值为假;反之,如果整型值非0,则其布尔类型为真。
它与零值比较的标准语句如下
if(flag) //表示flag为真
if(!flag) //表示flag为假
·整型变量和零值的比较
用“==”和“!=”直接与0进行比较,与零值比较的标准if语句如下:
int value=0;
………………
if(value==0)
if(value!=0)
………………
不可模仿布尔变量的风格而写成:
if(value) //会让人误解value是布尔变量
if(!value)
·浮点变量与零值的比较
不可用“==”和“!=”与任何数字比较,无论是float,还是double类型的变量,都有精度限制。所以一定要避免将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式。标准语句如下:
if( (x>=-EPSINON) && (x<=EPSINON) ) //其中EPSINON为所允许的误差精度。
·指针变量与零值比较
应当将指针变量用“==”或“!=”与NULL比较。指针变量的零值是“空”(记为NULL),尽管NULL的值与0相同,但是两者意义不同。假设指针变量的名字为p,它与零值比较的标准if语句如下:
if(NULL == p)//p与NULL显式比较,强调p是指针变量
if(NULL != p)
不要写成:
if(p==0) //会让人误解p是整型变量
if(p!=0)
或者
if(p) //会让人误解p是布尔变量
if(!p)
6、 提高循环体效率的技巧
(1)在多重循环中,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨循环层执行的次数。
//长循环在外层的代码参考如下,这样方式由于CPU跨循环层的次数增加,效率低下:
for(row=0;row<100;row++){
for(col=0;col<5;col++){
sum=sum+a[row][col]
}
}
//长循环在内层的代码参考如下,这样方式减少了CPU跨循环层的次数,效率提高了:
for(col=0;col<5;col++){
for(row=0;row<100;row++){
sum=sum+a[row][col]
}
}
(2)如果在循环体内,存在逻辑判断,并且循环次数很大,应将逻辑判断移到循环体的外面。参考代码如下:
//下面的代码效率低,但是程序比较简洁,可读性比较好
for(i=0;i<N;i++){
if(condition){
DoSomething();
}
else{
DoSomething();
}
}
//下面的代码效率高,但是程序不简洁,可读性不好
if(condition){
for(i=0;i<N;i++){
DoSomething();
}
}
else{
for(i=0;i<N;i++){
DoSomething();
}
}
(3)不可再for循环体内修改循环变量,防止for循环失去控制。
(4)中断嵌套循环的技巧(积累中)
7、 break和continue的说明
break语句终止当前循环,继续执行后面的代码。注意,这个break语句和swtich……case分支结构中的break不同(为什么不同)。一个break只能终止一层循环。
continue语句终止了当前循环,使程序返回到循环的头部继续执行,而不是跳出循环。
如果还想获得更多关于《Visual C++代码参考与技巧大全》的内容,可点击下面网址,
http://www.cppblog.com/kangnixi/archive/2010/01/13/105591.html