C语言编程中的编译器与可移植性问题
古老编译器的特点与问题
在C语言编程里,原型是C编译器极为重要的诊断工具。要是没有原型,各种错误可能在程序员毫无察觉的情况下出现。所以,原型从C++借鉴到了C语言中。
C语言的库也在不断发展。曾经,“标准”C库就是随UNIX操作系统附带的库。后来,UNIX操作系统分裂为BSD - UNIX和System V UNIX两个家族,标准库也随之分裂。当ANSI对C语言进行标准化时,也对库进行了标准化,但现在仍能看到使用旧库调用的代码。新旧库的主要差异如下:
- 旧的K&R C没有 stdlib.h 或 unistd.h 头文件。
- 许多旧函数被重命名或替换,具体如下表所示:
| K&R函数 | ANSI等效函数 | 说明 |
| ---- | ---- | ---- |
| bcopy | memcpy | 复制数组或结构体 |
| bzero | memset | 将内存置为零 |
| bcmp | memcmp | 比较两段内存 |
| index | strchr | 在字符串中查找字符 |
| rindex | strrchr | 从字符串末尾开始查找字符 |
| char *sprintf | int sprintf | K&R函数返回字符串指针,ANSI标准函数返回转换的项数 |
以下是一段使用旧库调用可能出现问题的代码示例:
char last[100]; /* La
超级会员免费看
订阅专栏 解锁全文
277

被折叠的 条评论
为什么被折叠?



