今天才发现C程序中有#include_next,你们见过么?

洞庭小哥 2013-03-04 02:43:29

#include_next是GNU的一个扩展,并不是标准C中的指令。

有些复杂晦涩,呵呵~
...全文
903 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
洞庭小哥 2013-03-04
  • 打赏
  • 举报
回复
引用 7 楼 mymtom 的回复:
#include_next <filename.h> 意思就是include位于搜索路径位于当前文件之后的文件filename.h 作用是这样的,就是你想用自己的函数代替其他库函数,但是 1. 不想修改源代码, 2. 不能修改原来的头文件 这是就可以用#include_next了。 下面的例子用在不改变源代码和头文件的情况下,实现了记录malloc函数调用……
mymtom解释的很到位啊,高手!
mymtom 2013-03-04
  • 打赏
  • 举报
回复
具体的说明可以参考gcc文档 http://www.delorie.com/gnu/docs/gcc/cpp_11.html
mymtom 2013-03-04
  • 打赏
  • 举报
回复
#include_next <filename.h> 意思就是include位于搜索路径位于当前文件之后的文件filename.h 作用是这样的,就是你想用自己的函数代替其他库函数,但是 1. 不想修改源代码, 2. 不能修改原来的头文件 这是就可以用#include_next了。 下面的例子用在不改变源代码和头文件的情况下,实现了记录malloc函数调用情况。

/**
 * @file        stdlib.h
 * @author      mymtom
 */
#ifndef STDLIB_H
#define STDLIB_H

#include_next <stdlib.h>

#include <stdio.h>


static void * my_malloc(const char *file, int line, const char *func, size_t size)
{
        void *ptr;
        ptr = malloc(size);

        /* 记录调用函数名称和返回值 */
        printf("位于文件%s第%d行的函数%s调用了malloc, size=%d, 返回值为%p\n", file, line, func, size, ptr);

        return ptr;
}

#define malloc(size) my_malloc(__FILE__, __LINE__, __FUNCTION__, size)

#endif /* STDLIB_H */

/**
 * @file        main.c
 * @author      mymtom
 */

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
        malloc(80);

        return 0;
}
注意自己的stdlib.h位于当前目录下,所以要加上-I. $ gcc -I. main.c -o main $ ./main 位于文件main.c第11行的函数main调用了malloc, size=80, 返回值为0x28201060
tonforce 2013-03-04
  • 打赏
  • 举报
回复
还真没见过, 不过楼上说的好啊,为了移植,还是用标准的贴身又贴心啊
whizer 2013-03-04
  • 打赏
  • 举报
回复
为了今后的移植,还是用标准的好。
图灵狗 2013-03-04
  • 打赏
  • 举报
回复
确实是很晦涩,尽量用ANSI C标准,方便自己也方便他人。
引用 楼主 lewsn2008 的回复:
#include_next是GNU的一个扩展,并不是标准C中的指令。 有些复杂晦涩,呵呵~
ardayoyo 2013-03-04
  • 打赏
  • 举报
回复
赵老湿你摊上大事了!
zhao4zhong2 2013-03-04
  • 打赏
  • 举报
回复
不要迷信书、考题、老师、回帖; 要迷信CPU、编译器、调试器、运行结果
赵4老师 2013-03-04
  • 打赏
  • 举报
回复
把有限的生命浪费在品尝/品鉴无穷多种的语法糖中,我认为不值当。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧