《C陷阱与缺陷》学习笔记(一)

来源:互联网 发布:中电飞华网络宽带 编辑:程序博客网 时间:2024/06/05 14:28
  • 编码的一个习惯

在两个token(符号)之间务必要用空格来分开。

比如下面这句代码:

①a=-1;    

写成这样就比较好:

②a = -1;

这样写有助于使得代码的符号的划分更清晰,更容易被识别。同时也会避免编译器在进行词法分析的时候错误地分析符号。

例如,上面例子在一些古老的C语言编译器中会出问题。

这些编译器中-=和=-被视作意义相同的运算符,因此①会被这些编译器识别为下面的语句:

③a = a - 1;

  • =、==、:=

老生常谈的一个问题。

首先,在C语言中,一定要区分=和==这两个符号。

其次,在linux中:=和=都在在作为赋值运算符被使用。

在makefile中:=被用来进行非递归的赋值,而=则是递归地进行赋值。

  • 对于多个字符组成的token(符号)要注意加括号来消除二义性

看下面这行代码。

④a = b / *c;

这行代码如果没有空格分隔开各个token的话,则是下面这幅模样:

⑤a=b/*c;

代码中的/*可以被解释为是注释的开始,也可以是按照④那样被解释为/和*两个token。

这种情况下最好添加括号以消除代码的二义性,较好的代码如下:

⑥a = b / (*c);

  • 由双引号和单引号引起来的字符串

单引号引起来的字符,注意要是一个而不是多个字符,若用单引号引起一个字符串则是一个不科学的行为,现代编译器也会提醒这种错误。

单引号引起来的部分被编译器视作是字符,而双引号引起来的部分的值则被视作该字符串的地址。

注意,双引号引起来的部分不是被作为“指针变量”来使用的,要区分指针变量和地址。