良好的程序设计风格

本文介绍了C语言编程中的一系列最佳实践,包括变量命名、代码格式、注释规范以及提高程序可读性和健壮性的方法。
全局变量用具有描述意义的名字,局部变量用短名字。函数采用动作性的名字。保持一致性。 

缩进形式显示程序结构,使用一致的缩行和加括号风格。使用空行显示模块 充分而合理地使用程序注释 给函数和全局数据加注释。不要注释不好的代码,应该重写。不要与代码矛盾。 友好的程序界面,程序界面的方便性及有效性 不要滥用语言技巧 使用表达式的自然形式。利用括号排除歧义。分解复杂的表达式。当心副作用,像++ 这一类运算符具有副作用。 程序的健壮性:容错 模块化编程 


匈牙利命名法为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))
标识符号应能提供足够信息,最好是可以发音的。
为全局变量取长的,描述信息多的名字,为局部变量取短名字
名字太长时可以适当采用单词的缩写。但要注意,缩写方式要一致。要缩写就全都缩写。
比如 单词Number, 如果在某个变量里缩写成了:
int nDoorNum;那么最好包含 Number单词的变量都缩写成 Num。
4)注意使用单词的复数形式。如
    int nTotalStudents, nStudents ;容易让人理解成代表学生数目,而 nStudent 含义就不十分明显
5) 对于返回值为真或假的函数,加"Is"前缀如:
    int     IsCanceled();
    int     isalpha(); // C语言标准库函数
    BOOL    IsButtonPushed();
6) 对于获取某个数值的函数,加 "Get"前缀
    char * GetFileName();
7) 对于设置某个数值的函数,加"Set"前缀
    void SetMaxVolume();
8) 一般变量和结构名用名词,函数名用动词或动宾词组。
9) 行宽与折行。
    一行不要太长,不能超过显示区域。以免阅读不便。太长则应折行。折行最好发生在运算符前面,不要发生在运算符后面如
    if(  Condition1() && Condition2() 
        && Condition3() )  {
    }
10) 变量和运算符之间最好加1个空格
    int  nAge = 5;
    nAge = 4;
    if( nAge >= 4 ) 
        printf( “%d”,nAge);

    for(  i = 0; i < 100; i ++ );
11)稍复杂的表达式中要积极使用括号,以免优先级理解上的混乱
    n = k +++ j;   //不好
    n = ( k ++ ) + j;  //好一点
12)不很容易理解的表达式应分几行写:
    n = ( k ++ ) + j;应该写成:
      n = k + j;
      k ++;
13)不提倡在表达式中使用 ? : 形式,而用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--];
14)嵌套的if else 语句要多使用 { }
    if( Condition1() ) 
        if( condition2()
            DoSomething();
        else
            NoCondition2();
不够好,应该:
if( Condition1() ) {
        if( condition2()
            DoSomething();
        else
            NoCondition2();    
}
15)应避免 if else 的多重嵌套,而用并列的完成。
if( Condition1() ) {
    if ( Condition2() ) {
        if( Condition3() ) {
            Condition123();
        }else  {
            NoCondition3();
        }
    }else {
        NoCondition2();
    }
}else {
    NoCondiction1();
}

替换为:

if( ! condition1 ) {
    NoCondition1();
}else if( ! condition2 ) {
    NoCondition2();
}else if( ! condition3) {
    NoCondition3();
}else {
    Condition123();
}
16) 遵循一些惯例的写法,如:
循环的固定写法:
       for( i = 0;i < n ;i ++ )     array[i] = 0;
而非    i = 0 ;
       while( i <= n-1)      array[i++] = 0;
死循环写法:
       for( ; ; ) { … }   或  while(1){ … }
17)写出来的代码应该容易读出声
比如 
if( !( n > m ) && !( s > t))
 就不如 
if( ( m <= n ) && ( t <= s )) 

if( !( c == 'y' || c == 'z')) 
不如 
if( c!= 'y' && c!= 'z');


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值