C语言杂记
注意signed int 与 unsigned int 之间的比较,与运算因为当int 型变量为-1时很可能被升级成无符号整型,就导致取反+1这种运算的产生,出现无法控制的很大的数。
malloc(strlen(str))绝对错误地语句,考虑字符串需要+1.
NULL 与NUL的区别:
NUL:用于结束一个字符串。
NULL:表示什么也不做(空指针)。
在switch语句中defaut关键字可以放在任意位置,编译器不检查,可能导致无意的跳过case.
注意变量的作用域如果过宽会对库函数造成影响。其中有一个all -- or -- nothing 原则,一个符号要么全局可见,要么对其他文件都不可见。
C语言似乎比其他语言更接近标记歧义性的曲折边缘。
结合性:
只用于表达式中出现两个以上相同优先级的操作符的情况,用于消除歧义。
gets()函数导致蠕虫病毒,并且现在的BUG还没有清除。
sizeof的操作数最好加上括号,不然容易引起歧义如(sizeof*p)
C语言 还有最大一口策略,如果下一种标记有超过一组的解释方案,编译器将自动选取能组成最长字符序列的方案。
注意const 的用法
指针的声明方法
结构体的内存对齐问题
为了代码的可读性,变量的声明应该与类型的声明分开
一个整形参数一般会被传递到寄存器中,而结构体参数很可能会被传递到堆栈中。
define 与typedef的区别
1.define与其他的类型相配进行扩展,typedef却不行
2.在连续变量出现时,define只控制前一个变量,typedef则控制所有的变量