dram.me

《C陷阱与缺陷》读书笔记(第一章)

1.1 =不同于==

有时候可能需要在判断语句中进行赋值,再判断结果是否为零。如果确实想这么写: if(x = y) ,也应该显式地比较,以免引起误解: if((x = y) != 0)

1.3 词法分析中得“贪心法”

这一节作者提到了一个例子。y = x/*p,代码本意是用 x 去除 p 所指向的数,但可能会被编译器理解为一段注释的开始。所以在双目运算符左右尽量加空格还是比较明智得选择。

1.4 整形常量

如果在八进制的数值表示中出现8,9,gcc 会直接报错。

1.5 字符与字符串

gcc 中也支持多字节字符常量,比如 int i = 'abcd' 后,i 的值为:0x61626364。但在编译时会出现警告。另外,如果变量无法完整地装入多字节字符常量时,比如 char c = 'abcd',此时 c 的值为多字节字符的最后一个字符的值,即 'd',编译器对此会外加一个溢出警告。