#include_next的语意

#include_next的语意 继承和头文件
继承是对象或者文件通过拷贝其它对象或文件的内容,从而衍生出一个新的对象。对于C语言的头文件来说,继承就是一个头文件包含另一个头文件,然后更改(如更改一些宏的值)或增加一些内容。
如果衍生头文件和基础头文件(base header file)的文件名不同,处理方法很简单,只需在衍生头文件中包含基础头文件即可#include "basic"(base指代基础头文件的文件名)。
有时候我们需要使衍生出来的头文件和基础头文件的文件名相同。例如一个应用程序需要使用系统头文件sys/signal.h,但是在某些系统上/usr/include/sys/signal.h不完全和应用程序期望的一样,那么定义一个本地("local" version)的头文件将会很方便,如定义/usr/local/include/sys/signal.h来覆盖或补充系统提供的头文件。
首先写出满足程序期望的头文件/usr/local/include/sys/signal.h,然后在编译时增加"-I /usr/local/include"选项。但是如果要在新的头文件中包含标准的sys/signal.h,通过在新的文件中增加"#include <sys/signal>"是不可能实现的。因为这样包含的是文件本身而不是系统的头文件,从而导致无限的递归。
在新的头文件中增加"#include </usr/include/sys/signal.h>"固然可以解决,但是这种方式的缺点是固定了系统头文件的位置,如果系统头文件的位置改变了,这种方法就会失效。另一种简单的方法是使用"#include_next",表示包含文件名为该名字的下一个头文件。这条语句使编译器到其它目录中搜索该头文件。
继前面的例子,在头文件/usr/local/include/sys/signal.h中增加"#include_next <sys/signal.h>"就可能正确包含系统头文件了。

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值