前言
1. 比较语句养成先写常数值的习惯: if (3 == x) ……
第一章,穿越时空的迷雾
1. 关键字 const 并不能把变量变成常量,它的限定作用只表示它所限定的符号不能被赋值:
const int limit = 10;
const int *limitp = &limit;
int i = 27;
limitp = &i;
关于指针的 const 限定,限定的是指针所指向的区域为常态的,如上第2句,说明的是:limitp 指针所指向的整形数是不能被改变的,而指针本身却可以被赋值。
2. 尽量不要在代码中使用无符号类形,避免不必要的复杂性。尤其是不要仅仅因为你要表示的数不存在负值时就使用它。尽量使用有符号类型,这样在涉及混合类型升级的复杂细节时,不必担心边界情况(-1被翻译成非常大正数)。只有在使用段位和二进制掩码时,才推荐使用无符号数。若使用,尽量显式使用强制类型转换来限定有无符号类型。
第二章,这不是BUG,而是语言特性
1. 控制文件内部变量的可见性,使用符号 external 与 static。前者说明变量在其他文件中声明,全局可见(默认);后者说明变量被限制在本文件内。
2. static 关键字在被使用在函数内部的时候,表明所声明的变量在各个调用间保持一致性。
第三章,分析C语言的声明
1. 关于 const 声明的几点说明:
1)const int * grape; // 指针所指向 int 类型对象是只读的;
2)int const * grape; // 指针所指向 int 类型对象是只读的;
3)int * const grape; // 指针是只读的;
4)const int * const grape; // 只读指针指向只读的 int 类型对象;
5)int const * const grape; // 只读指针指向只读的 int 类型对象;
2. 枚举类型缺省取值:缺省情况下,整型值从0开始取值,如果对枚举类型中某个标示符进行了赋值,则进阶其后的标示符比之前大1,以此类推。