文章参考于文献:《C陷阱与缺陷》[美]Andrew Koening
🌈个人主页:慢了半拍
🔥 创作专栏:《史上最强算法分析》 | 《无味生》 |《史上最强C语言讲解》 | 《史上最强C练习解析》
🏆我的格言:一切只是时间问题。
链接陷阱
一、什么是连接器
典型的链接器把由编译器或汇编器生成的若干个目标模块,整合成一个被称为载入模块或可执行文件的实体–该实体能够被操作系统直接执行。
链接器通常把目标模块看成是由一组外部对象组成的。每个外部对象代表着机器内存中的某个部分,并通过一个外部名称来识别。因此,==程序中的每个函数和每个外部变量,如果没有被声明为static,就都是一个外部对象。==某些C编译器会对静态函数和静态变量的名称做一定改变,将它们也作为外部对象。由于经过了“名称修饰”,因此它们不会与其它源程序文件中的同名函数或同名变量发生命名冲突。
二、声明与定义
三、命名冲突与 static 修饰符
四、形参、实参与返回值
五、检查外部类型
六、头文件
库函数陷阱
一、返回整数的 getchar 函数
二、更新顺序文件
三、缓冲输出与内存分配
四、使用 errno 检测错误
五、库函数signal
预处理陷阱
一、不能忽视宏定义中的空格
二、宏并不是函数
三、宏并不是语句
四、宏并不是类型定义
可移植性缺陷
一、应对C语言标准变更
二、标识符名称的限制
三、整数的大小
四、字符是有符号整数还是无符号整数
五、移位运算符
六、内存位置0
七、除法运算时发生的截断
八、随机数的大小
九、大小写转换
十、首先释放,然后重新分配
十一、可移植性问题的一个例子