#include_next定义

发布时间 2023-05-30 23:11:38作者: woodx

#include_next和#include指令一样,也是包含一个头文件,它们的不同地方是包含的路径不一样。

 

#include_next的意思就是“包含指定的这个文件所在的路径的后面路径的那个文件”,听起来是不是很坳口,我自己也觉得是这样,但下面举个例子说明就清楚了。

例如有个搜索路径链,在#include中,它们的搜索顺序依次是A,B,C,D和E。在B目录中有个头文件叫a.h,在D目录中也有个头文件叫a.h,如果在我们的源代码中这样写#include <a.h>,那么我们就会包含的是B目录中的a.h头文件,如果我们这样写#include_next <a.h>那么我们就会包含的是D目录中的a.h头文件。#include_next <a.h>的意思按我们上面的引号包含中的解释来说就是“在B目录中的a.h头文件后面的目录路径(即C,D和E)中搜索a.h头文件并包含进来)。#include_next <a.h>的操作会是这样的,它将在A,B,C,D和E目录中依次搜索a.h头文件,那么首先它会在B目录中搜索到a.h头文件,那它就会以B目录作为分割点,搜索B目录后面的目录(C,D和E),然后在这后面的目录中搜索a.h头文件,并把在这之后搜索到的a.h头文件包含进来。

 

疑惑:搜索路径怎么看?

先-I指定的路径目录,再/user/local,最后到全局

 

参考:原文:https://blog.csdn.net/fjb2080/article/details/5247494 

 

根据《GCC技术参考大全》

该指示字可用于增加或修改系统头文件的定义,而不需要修改文件本身。例如,系统头文件/usr/include/stdio.h包含宏定义getc,它会从输入流中独处单个字符。要改变这个宏定义,让它总是返回同一个字符,保留头文件的其他内容,可以创建自己的stdio.h头文件,包含一下内容:

#include_next "stdio.h"

#undef getc

#define getc(fp) ((int)'x')

使用该头文件会包含系统的stdio.h,以及自己重定义的宏getc。