代码风格

< 上一页 复合语句 为什么要引入数组 下一页 >

学习了C语言的语句写法,紧跟着就要养成良好的编码习惯。良好的C代码书写习惯,需要具有一些典型的语句编码风格。下面介绍一下C语言语句的编码风格。

好的代码风格,让代码看着结构清晰,逻辑分明,并具有一种美感。每个公司都有自己的代码风格要求。但总体来说,C代码的风格需要注意如下几个地方:

1.  注释

       注释有两种方式,它们分别是:

       方式1

/*

 *  this is a comment

 *  the following code will do something

 *  copyright@mallocfree.com

 *  email:xxxx@126.com

 */

 

/*  this is a comment  */

 

方式2

 

//  this is a comment

 

注意/* */风格的注释不能嵌套使用。比如:

 

1./*

2. * xxxx

3. /*

4.  * yyy

5.  */

6. * zzz

7.*/

 

17行的注释中嵌套了35行的注释。那么注释将在第5行终止。第67行将失去注释作用。

2.  断行

       为了便于阅读,一行代码不要太长。在Solaris内核代码中,要求一行不应超过80个字符。断行时应该选择将操作符留在最右边。新起一行应该在原来行缩进的基础上空4个字符。    例如:

 

if(pEnumProcesses == NULL ||

     pGetModuleFileName == NULL ||

     pEnumProcessModules == NULL)

{

         return;

}

 

3.  每行只写一条语句

 

int a, b, t;

 

t = a; a = b; b = t;

 

应该写为:

 

int a;

int b;

int t;

 

t = a;

a = b;

b = t;

 

       这样写很方便注释与调试。

4.  分行定义变量

       参加条例3的定义

5.  使用空行分隔代码块

       将完成同一逻辑的代码放在一个段中。适当地添加空行则是一个非常有效的代码整理方式——有点像文章中的分段,一段意思也许需要若干个句子才能表达清楚,在表达下一段意思之前,应当另起一段。

6.  使用空格降低代码密度

       运算符与操作数之间以空格间隔;关键字与非关键字之间空格间隔。但单目运算符与它的操作数之间应紧密相接,不需要空格。括号(包括小括号、中括号与大括号)的内侧应该紧靠操作数或其他运算符,不需要添加额外的空格。不要在函数名和其后的括号之间添加空格。

       需要空格的位置:

1)  forifwhileswitch等关键字与之后的左括号’(‘之间,如:

 

while (b)

{

}

 

2)  左花括号’{‘之前,如:

 

if (b) {

 

}

 

       3)双目运算符两侧,例如:

p == NULL;

a += b;

 

       4)逗号’,’与分号’;’之后,如:

for (i = 0; i < 10; i++)

{

}

printf(“%d, %c\n”, a, ch);   

 

       不要空格的位置:

1)  函数名与之后的左括号’(‘,包括带参数的宏与之后的左括号’(‘,如:

 

max(a, b);

 

       2)分号’;’与冒号’:’之前,如:

 

a = b;

switch (i)

{

case 1:

     break;

defaut:

     break;

}

 

       3)左括号’(‘右边,右括号’)’左边,如:

if (p == NULL)

       4)单目运算符,如:

i++ !b

1)  关键字与其他字符之间,如:

 

int length = sizeof (b);

 

       其中的intsizeof都是关键字。

2)  括号(大,中,小)内侧:

 

int a[500];

if (a >= b)

{

     return (a);

}

 

       7’.’’->’运算符不需要空格,如:

 

if (b->left)

{

}

list.val = 0;

      

       需要空行的位置:

       1)函数的定义之前、函数的定义之后;

       2)一组联系紧密的代码段之前和之后。

/* other code above */

 

void swap(int a, int b)

{

     int t;

 

     t = a;

     a = b;

     b = t;

 

     return;

}

 

/* other code below */

 

7.  return

 

return (a);

return (NULL);

return (a + b);

return;

 

8.  缩进

       是通过在每一行的代码左端空出一部分长度(一般为一个TAB键),更加清晰地从外观上体现出程序的层次结构。当遇到有关命名空间、类、结构、函数、以及枚举等等复杂程序结构的定义的时候,我们通常需要将它的内容缩进一层。

       一般函数体、过程体、循环体(for,while,do)、条件判断体(if)和条件选择(switch,case,select)需要向内缩进一格,同层次的代码在同层次的缩进层上。

 

if (condition)

{

     //缩进

printf(“hello world”);

}

else if (condition)

{

     //缩进

}

else

{

     //缩进

}

for (int i = 0; i < n; i++)

{

     //缩进

}

 

while (condition)

{

     //缩进

}

 

do

{

     //缩进

} while(conditon)

 

switch(var)

{

case a:

     //缩进

     break;

case b:

     //缩进

     break;

default:

     //缩进

     break;

}

 

int function(int a, int b)

{

     //缩进

}

 

class MyClass

{

     //缩进

}

struct MyStruct

{

     //缩进

};

 

9.  大括号

如果ifwhilefor等等的结构体仅为一条语句,那么大括号是可以不写的。其实复合体就是将多条语句合并起来充当单条语句来用的。甚至我们可以将结构体与ifwhilefor写成一行。当代码数量增加,上下文的代码变得复杂时,我们有可能会对ifwhilefor的结构体究竟包含哪些语句产生误解。因此,我们建议,即使ifwhilefor结构的内容只有一条语句,也应该像处理多条语句那样,写在大括号内。

下面是大括号与各种语句的布局写法例子:

 

if (condition) {

 

}

else if (condition) {

 

}

else {

 

}

for (int i = 0; i < n; i++) {

 

}

 

while (condition)

{

 

}

 

do

{

 

} while(conditon)

 

switch(var)

{

case a:

     break;

case b:

     break;

default:

     break;

}

 

int function(int a, int b)

{

 

 

}

 

class MyClass

{

 

}

struct MyStruct

{

    

};

 

10.              NULL0FALSE, 100等常量与变量的比较写法

把常量写在左边,可以提早发现错误,在编译阶段

指针:

if (NULL  ==  p)

if (p == NULL)

整数:

if (i == 0)

if 0 == i

布尔值:

if  (b) if(b==TRUE)

if (!b)  if(b==FALSE)

实数:

不要将实数和零直接比较,如:

float f;

if (f == 0)

上面的写法是错误的。应该按照如下的方式进行:

 

#define DELTA 0.00001

if (f >= -DELTA && f <= DELTA)

 

int a = 10;

if (a==0)

{

}

else

{

}


< 上一页 复合语句 为什么要引入数组 下一页 >

周哥教IT,分享编程知识,提高编程技能,程序员的充电站。跟着周哥一起学习,每天都有进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

当你决定关注「周哥教IT」,你已然超越了90%的程序员!

IT黄埔-周哥教IT技术交流QQ群:213774841,期待您的加入!

二维码
微信扫描二维码关注