C语言书籍——B/陷阱之处(2)

本文详细探讨了C编程中涉及的链接器工作原理、命名冲突、库函数的使用误区、预处理宏的特性以及影响可移植性的因素,帮助开发者避免常见陷阱。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章参考于文献:《C陷阱与缺陷》[美]Andrew Koening

🌈个人主页慢了半拍

🔥 创作专栏:《史上最强算法分析》 | 《无味生》 |《史上最强C语言讲解》 | 《史上最强C练习解析》

🏆我的格言:一切只是时间问题。 

链接陷阱

一、什么是连接器

典型的链接器把由编译器或汇编器生成的若干个目标模块,整合成一个被称为载入模块或可执行文件的实体–该实体能够被操作系统直接执行。

链接器通常把目标模块看成是由一组外部对象组成的。每个外部对象代表着机器内存中的某个部分,并通过一个外部名称来识别。因此,==程序中的每个函数和每个外部变量,如果没有被声明为static,就都是一个外部对象。==某些C编译器会对静态函数和静态变量的名称做一定改变,将它们也作为外部对象。由于经过了“名称修饰”,因此它们不会与其它源程序文件中的同名函数或同名变量发生命名冲突。

二、声明与定义

三、命名冲突与 static 修饰符

四、形参、实参与返回值

五、检查外部类型

六、头文件

库函数陷阱

一、返回整数的 getchar 函数


二、更新顺序文件


三、缓冲输出与内存分配


四、使用 errno 检测错误


五、库函数signal

预处理陷阱

一、不能忽视宏定义中的空格


二、宏并不是函数


三、宏并不是语句


四、宏并不是类型定义

可移植性缺陷

一、应对C语言标准变更


二、标识符名称的限制


三、整数的大小


四、字符是有符号整数还是无符号整数


五、移位运算符


六、内存位置0


七、除法运算时发生的截断


八、随机数的大小


九、大小写转换


十、首先释放,然后重新分配


十一、可移植性问题的一个例子

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慢了半拍i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值