LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 987|回复: 2

直接include C库子目录头文件的危险之处?

[复制链接]
发表于 2009-4-15 10:18:10 | 显示全部楼层 |阅读模式
发现GNU C library里面存在很多头文件里面包含着子目录的另一个文件,如fcntl.h里面有一行包括了bits/fcntl.h,而且在很多这种情况,在子目录里面的那个文件都会告知:不要直接include 子目录里的文件。像在bits/fcntl.h里面就有这么一段

#ifndef _FCNTL_H
# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
#endif

后来也想到的确这样直接使用会有潜在的危害,现在怎么也想不起来了,好像这种潜在的危害不是编译错误,而是可能会导致程序出现意外的结果,记不起来当时所想的,不知道大家有什么见解?
 楼主| 发表于 2009-4-15 10:40:07 | 显示全部楼层
我是楼主,现在稍微想起一点了,sorry,刚刚说不是关于编译错误,但现在想起来好像就是关于编译错误,在于条件包含上面,可能在用到一些宏常量是在母文件里才有定义的。

除了编译错误外,要么就是初始头文件对此子文件条件选择,要么就是可能出现宏定义的覆盖问题,我想除这些外,应该没什么潜在的危险了,不知道大家如何见解
回复 支持 反对

使用道具 举报

发表于 2009-4-16 16:14:53 | 显示全部楼层
还有程序的可移植性,因为并不是所有的编译器都有 bits 这个目录。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表