C缺陷拾遗
1.一个采用补码的系统,负数的范围比正数的范围大1。举例如下,
8位带符号数的取值范围是[-2^7, 2^7 – 1].
如果n=-2^7,那么-n = ?因此,为了防止出现负值转换为正值时出现的溢出,应该不将负值转换为正值。
因此,将所有正数转换为负数。同时,增加了一个printneg函数。这个函数打印负数。
2. 负数求余的结果是正,还是负?举例如下,
-5 % 10 = -5可以,只要-5 / 10 = 0就行。
-5 % 10 = 5也可以,只要-5 / 10 = -1 就行。
不同的芯片得出的结果也是不一样的。
因此,为了保证在任何芯片上求余结果相同,增加了一段处理代码。
null指针并不指向任何对象。除非是用于赋值或比较运算,处于其他任何目的使用null指针都是非法的。
一些C语言实现对内存位置0强加了硬件级的读保护,在其上工作的程序如果错误使用了一个null指针,将立即终止执行。
一些C语言实现对内存位置0只允许读,不允许写。
一些C语言实现对内存位置0既允许读,也允许写