C语言陷阱与缺陷(7)
2015-08-03 09:02
288 查看
可移植性
1.应对C语言标准变更
2.标识符名称的限制
能区别多少个字符不同的外部名称,有无区分大小写。
3.整数的大小
C提供了3种不同长度的整数:short、int、long,它们的长度是非递减的。
4.字符是有符号整数还是无符号整数
在实际许可的情况下,尽量使用无符号类型
5.移位运算符
有符号数的右移,可以用0填充空出的位,也可以用符号位的副本填充空出的位;无符号数的右移,只能用0填充空出的位。
移位对象的长度为n位,则移位计数a的范围为0<=a<n。
6.内存位置0
NULL指针并不指向任何对象,除了赋值和比较运算,其它任何目的使用NULL指针都是非法的。
NULL指针的误用是未定义的。
7.除法运算时发生的截断
在除法运算中,如:q=a/b,r=a%b,除了满足q*b+r=a,a的符号改变时,q的符号也改变但绝对值不变外,还要保证a与r同正负。
8.随机数的大小
PDP-11计算机上的整数长度为16位(包含符号位),其rand函数的返回值介于0到2^15-1之间。
9.大小写转换
先加再减,避免下溢出
1. 首先释放,然后重新分配
调用realloc函数,应先释放内存后在重新分配。
1.应对C语言标准变更
2.标识符名称的限制
能区别多少个字符不同的外部名称,有无区分大小写。
3.整数的大小
C提供了3种不同长度的整数:short、int、long,它们的长度是非递减的。
4.字符是有符号整数还是无符号整数
在实际许可的情况下,尽量使用无符号类型
5.移位运算符
有符号数的右移,可以用0填充空出的位,也可以用符号位的副本填充空出的位;无符号数的右移,只能用0填充空出的位。
移位对象的长度为n位,则移位计数a的范围为0<=a<n。
6.内存位置0
NULL指针并不指向任何对象,除了赋值和比较运算,其它任何目的使用NULL指针都是非法的。
NULL指针的误用是未定义的。
7.除法运算时发生的截断
在除法运算中,如:q=a/b,r=a%b,除了满足q*b+r=a,a的符号改变时,q的符号也改变但绝对值不变外,还要保证a与r同正负。
8.随机数的大小
PDP-11计算机上的整数长度为16位(包含符号位),其rand函数的返回值介于0到2^15-1之间。
9.大小写转换
先加再减,避免下溢出
1. 首先释放,然后重新分配
调用realloc函数,应先释放内存后在重新分配。
相关文章推荐
- C语言缺陷与陷阱(6)
- VS 编写c++dll库文件
- C语言简介
- 《C++ Primier Plus》01
- C语言的格式化输出函数printf
- LeetCode 210. Course Schedule II(拓扑排序-求有向图中是否存在环)
- C语言宏中"#"和"##"的用法
- cpp整理笔记:标准I/O的工作原理
- C++对象模型——Data Member的绑定(第三章)
- 堆排序C语言实现
- 一个栈,只提供push,pop,top,empty四种操作(这四种操作就是C++标准里的操作),对该栈的元素进行排序
- 水滴模拟问题(误)hdu5336
- 均值滤波器 ( Mean Filter ) C++ 实现
- 中值滤波器 ( Median Filter ) C++ 实现
- 高斯平滑 高斯模糊 高斯滤波器 ( Gaussian Smoothing, Gaussian Blur, Gaussian Filter ) C++ 实现
- hdu5339-Untitled // BestCoder Round #49 ($) 1001 (搜索)
- 图像锐化算法 C++ 实现
- A Simple Problem with Integers(线段树,区间求和)
- Sliding Window
- C语言:返回两个数组中第一个元素的指针,并输出这个值