设为首页 加入收藏

TOP

编码风格 - 缩进和空白(一)
2013-07-22 17:55:38 来源: 作者: 【 】 浏览:311
Tags:编码 风格   缩进 空白

  1. 缩进和空白

  我们知道C语言的语法对缩进和空白没有要求,空格、Tab、换行都可以随意写,实现同样功能的代码可以写得很好看,也可以写得很难看。

  1.1. 缺少缩进和空白的代码

  #include <stdio.h>

  #include <stdlib.h>

  #include <time.h>

  int main(void)

  {

  char gesture ={"scissor","stone","cloth"};

  int man,computer,result, ret;

  srand(time(NULL));

  while(1){

  computer=rand()%3;

  printf("\nInput your gesture (0-scissor 1-stone 2-cloth):\n");

  ret=scanf("%d",&man);

  if(ret!=1||man<0||man>2){

  printf("Invalid input!\n");

  return 1;

  }

  printf("Your gesture: %s\tComputer's gesture: %s\n",gesture[man],gesture[computer]);

  result=(man-computer+4)%3-1;

  if(result>0)printf("You win!\n");

  else if(result==0)printf("Draw!\n");

  else printf("You lose!\n");

  }

  return 0;

  }一是缺少空白字符,代码密度太大,看着很费劲。二是没有缩进,看不出来哪个{和哪个}配对,像这么短的代码还能凑合着看,如果代码超过一屏就完全没法看了。[CodingStyle]中关于空白字符并没有特别规定,因为基本上所有的C代码风格对于空白字符的规定都差不多,主要有以下几条。

  1、关键字if、while、for与其后的控制表达式的(括号之间插入一个空格分隔,但括号内的表达式应紧贴括号。例如:

  while (1);2、双目运算符的两侧各插入一个空格分隔,单目运算符和操作数之间不加空格,例如i = i + 1、++i、!(i < 1)、-x、&a 等。

  3、后缀运算符和操作数之间也不加空格,例如取结构体成员s.a、函数调用foo(arg1)、取数组成员a[i]。

  4、,号和;号之后要加空格,这是英文的书写习惯,例如for (i = 1; i < 10; i++)、foo(arg1, arg2)。

  5、以上关于双目运算符和后缀运算符的规则并没有严格要求,有时候为了突出优先级也可以写得更紧凑一些,例如for (i=1; i<10; i++)、distance = sqrt(x*x + y*y)等。但是省略的空格一定不要误导了读代码的人,例如a||b && c很容易让人理解成错误的优先级。

  6、由于UNIX系统标准的字符终端是24行80列的,接近或大于80个字符的较长语句要折行写,折行后用空格和上面的表达式或参数对齐,例如:

  if (sqrt(x*x + y*y) > 5.0

  && x < 0.0

  && y > 0.0)再比如:

  foo(sqrt(x*x + y*y),

  a[i-1] + b[i-1] + c[i-1])7、较长的字符串可以断成多个字符串然后分行书写,例如:

  printf("This is such a long sentence that "

  "it cannot be held within a line\n");C编译器会自动把相邻的多个字符串接在一起,以上两个字符串相当于一个字符串"This is such a long sentence that it cannot be held within a line\n"。

  8、有的人喜欢在变量定义语句中用Tab字符,使变量名对齐,这样看起来很美观。

  →int    →a, b;

  →double →c;内核代码风格关于缩进的规则有以下几条。

  1、要用缩进体现出语句块的层次关系,使用Tab字符缩进,不能用空格代替Tab。在标准的 字符终端上一个Tab看起来是8个空格的宽度,如果你的文本编辑器可以设置Tab的显示宽度是几个空格,建议也设成8,这样大的缩进使代码看起来非常清 晰。如果有的行用空格做缩进,有的行用Tab做缩进,甚至空格和Tab混用,那么一旦改变了文本编辑器的Tab显示宽度就会看起来非常混乱,所以内核代码 风格规定只能用Tab做缩进,不能用空格代替Tab。

  2、if/else、while、do/while、for、switch这些可以带语句块的语句,语句块的{或}应该和关键字写在同一行,用空格隔开,而不是单独占一行。例如应该这样写:

  if (...) {

  →语句列表

  } else if (...) {

  →语句列表

  }但很多人习惯这样写:

  if (...)

  {

  →语句列表

  }

  else if (...)

  {

  →语句列表

  }内核的写法和[K&R]一致,好处是不必占太多行,使得一屏能显示更多代码。这两种写法用得都很广泛,只要在同一个项目中能保持统一就可以了。

  3、函数定义的{和}单独占一行,这一点和语句块的规定不同,例如:

  int foo(int a, int b)

  {

  →语句列表

   

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇适配器模式C语言实现 下一篇利用C语言找出直系亲属

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: