编程规范只是一个规范,也可以不遵守,但是要做一个有良好编程风格的程序员,就一定要遵守编程规范,不仅方便自己以后的阅读,也可以方便与其他程序员的交流,要做到这一点,程序员应遵循一定的规范并贯穿程序的始终。首要考虑的是程序的可行性,可读性,可移植性,可维护性及可测试性,这是总则。
好的程序易读,理想的情况:能把一个程序代码读出声音来,别人听了后就知道这个程序是解决什么问题的,是如何解决的;精炼简洁:运行快,结构明了。
匈牙利命名法为c程序标识符的命名定义了一种非常标准化的方式,这种命名方式是以两条规则为基础的:
a 变量的名字以一个或者多个小写字母前缀开头,前缀能够体现变量数据类型,作用域等信息
b 在标识符内,前缀以后就是一个或者多个第一个字母大写的单词,这些单词清楚地指出了该标识符的作用。
(1)变量命名加前缀
c char
s short
n int nDoorNum
l long
b boolean 取值只为真和假的整型变量 如bValid
f float
d double
a 数组 a[5]
(2)变量名中单词开头字母大写,其他字母小写 但是常用的意义明显的变量,如i,j,k,坐标x,y等不必遵循1),2) StudentName , TeacherName
(3)常量和宏都是大写 单词之间用 ‘_’分隔
# define MAX_WIDTH 5
# define PI 3.14
# define ABS(x) ((x)>=0?(x):-(x))
标识符命名应注意的一些细节:
(1)标识符号应能提供足够信息,最好是可以发音的
(2)为全局变量取长的,描述信息多的名字,为局部变量取短名字
(3)名字太长时可以适当采用单词的缩写。但要注意,缩写方式要一致。要缩写就全都缩写。
比如单词:Number,如果在某个变量里缩写成了: int nDoorNum ;那么最好包含Number单词的变量都缩写成Num。
(4)注意使用单词的复数形式。如:int nTotalStudents,nStudents;容易让人理解成代表学生数目,而nStudent意义就不十分明显
(5)对于返回值为真或假的函数,加“ls”前缀如:
int lsCancleld() ;
int isalpha() ; //c语言标准库函数
BOOL lsButtonPushed() ;
(6)对于获取某个数值的函数,加“Get”前缀
char * GetFileName() ;
(7)对于设置某个数值的函数,加“Set”前缀
void SetMaxVolume() ;
(8)一般变量和结构名用名字,函数名用动词或动宾词组
程序书写格式注意事项:
(1)正确使用缩进
首先一定要有缩进,否则代码的层次不明显。
缩进应为4个空格较好。需要缩进时一律按Tab键,或一律按空格键,不要有时用Tab键缩进,有时用空格键缩进。一般开发环境都能设置一个Tab键相当于多少个空格。此时就都用Tab键
(2)行宽与折行
一行不要太长,不能超过显示区域。以免阅读不便。太长则应折行。折行最好发生在运算符前面,不要发生在运算符后面如:
if( Condition() && Condition2()
&&Consition3()){
}
(3)注意 ‘{‘,’}’位置不可随意,要统一
如果写了:
if(condition1()){
DoSomething();
}
别处就不要写:
if(condition2())
{
DoSomething() ;
}
(4)变量和运算符之间最好加1个空格
int nAge = 5 ;
nAge = 4 ;
if(nAge >= 4)
printf("%d",nAge) ;
for(i = 0;i < 100;i ++) ;
一些好的编程习惯:
(1)尽量不要用立即数,而用#define(C++中用const)定义成常量,以便以后修改
#define MAX_STUDENTDS 20
struct SStudent aStudents[MAX_STUDENTS] ;
struct SStudent aStudents[20] ;
#define TOTAL_ELEMENTS 100
for(i = 0;i < TOTAL_ELEMENTS;i ++){
}
(2)带参数的宏定义应该在整个宏体外加括号,而且宏参数都要用括号包裹
#define SQUARE(x) x*x //平方
则 SQUARE(k+1) ; 变成 k+1*k+1 ;错
即使 #define SQUARE(x) (x)*(x) 也不保险
1/SQUARE(x) ;变成 1/(x)*(x) ;错
应该:
#define SQUARE(x) ((x)*(x)) //平方
(3)稍复杂的表达式中要积极使用括号,以免优先级理解上的混乱:
n = k +++ j ; //不好
n = (k++)+ j ; //好一点
(4)不很容易理解的表达式应分几行写:
n = (k++) + j ;应该写成:
n = k + j ;
k ++ ;
(5)不提倡在表达式中使用?:形式,而用if ... else语句替代
xp = 2 * k <(n - m)? c[k+1]:d[k--] ;
if(2 * k < (n - m))
xp = c[k+1] ;
else
xp = d[k--] ;
(6)嵌套的if ... else语句要多使用{}
(7)应避免 if else的多重嵌套 而用并列的完成
(8)遵循一些惯例的写法,如:
循环的固定写法:
for(i = 0;i < n;i ++) array[i] = 0 ;
而非 i = 0 ;
while(i <= n-1) array[i++] = 0 ;
死循环写法:
for( ; ; ){...} 或 while(1) {...}
(9)写出来的代码应该容易读出声:
比如:
if(!(n > m)&&(s > t))
就不如:
if((m <= n)&&(t <= s))
if(!(c == 'y' || c == 'z'))
不如:
if(c != 'y' && c != 'z' ) ;