#include_next <filename.h>

意思就是include下一个(除本文件)文件名为 filename.h 的头文件

作用是这样的,就是你想用自己的函数代替其他库函数,但是
1. 不想修改源代码,
2. 不能修改原来的头文件
这是就可以用#include_next了。
下面的例子用在不改变源代码和头文件的情况下,实现了记录malloc函数调用情况。

C/C++ code

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

/**

 * @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 */

时间: 2024-10-12 02:31:51

#include_next <filename.h>的相关文章

用 #include &lt;filename.h&gt; 格式来引用标准库的头文件

用 #include <filename.h> 格式来引用标准库的头文件(编译器将从 标准库目录开始搜索). 1 #include <iostream> 2 3 /* run this program using the console pauser or add your own getch, system("pause") or input loop */ 4 5 6 using namespace std; 7 8 //定义结构 9 struct stud

用 #include “filename.h” 格式来引用非标准库的头文件

用 #include "filename.h" 格式来引用非标准库的头文件(编译器将 从用户的工作目录开始搜索) 1 #include <iostream> 2 3 /* run this program using the console pauser or add your own getch, system("pause") or input loop */ 4 using namespace std; 5 //参数带有默认值的函数 6 disp(

[译]可编程硬件Arduino初探(4)-MultiWii之config.h

0.前言 从可编程硬件初探(4)开始的一系列文章将集中进行一些优秀原文的翻译.本文为MultiWii系列的第一个翻译,Config.h 原文参考:http://www.multiwii.com/wiki/index.php?title=Config.h config.h \文件 How it works \基本原理 The first configuration of MultiWii is done in the config.h file of the firmware source. Wi

头文件&lt;limits.h&gt;

头文件<limits.h>用来检测整型数据类型的表达式范围. Linux version 2.6.32-573.el6.x86_64中<limits.h>源码: /* Copyright (C) 1991, 1992, 1996, 1997, 1998, 1999, 2000, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free s

《Linux/Unix系统编程手册》读书笔记7 (/proc文件的简介和运用)

<Linux/Unix系统编程手册>读书笔记 目录 第11章 这章主要讲了关于Linux和UNIX的系统资源的限制. 关于限制都存在一个最小值,这些最小值为<limits.h>文件中的常量. 通过cat 命令查看: [email protected]:~/Code/tlpi$ cat /usr/include/limits.h /* Copyright (C) 1991, 1992, 1996, 1997, 1998, 1999, 2000, 2005 Free Software

httpd服务的配置

httpd2.2安装 yum安装 # yum install httpd-2.2.15-26.el6.centos.x86_64 配置文档:编辑之前复制一份 vim /etc/httpd/conf/httpd.conf 1.ServerRoot "/etc/httpd"   服务器运行目录 配置文件.错误文档.日志的保持目录 2.端口 Listen [IP] PORT Listen 80 Listen 8080 这样,http://192.168.1.31:8080 就可以访问主页面了

C/C++笔试忍法帖04——C/C++语法特性篇

1.Heap与stack的差别 Heap是堆,stack是栈. Stack的空间由操作系统自动分配/释放,Heap上的空间手动分配/释放. Stack空间有限,Heap是很大的自由存储区 C中的malloc函数分配的内存空间即在堆上,C++中对应的是new操作符. 程序在编译期对变量和函数分配内存都在栈上进行,且程序运行过程中函数调用时参数的传递也在栈上进行. 2.In C++, what does "explicit" mean? what does "protected&

学习笔记(2)---Matlab 图像处理相关函数命令大全

Matlab 图像处理相关函数命令大全 一.通用函数: colorbar  显示彩色条 语法:colorbar \ colorbar('vert') \ colorbar('horiz') \ colorbar(h) \ h=colorbar(...) \ colorbar(...,'peer',axes_handle) getimage 从坐标轴取得图像数据 语法:A=getimage(h) \ [x,y,A]=getimage(h) \ [...,A,flag]=getimage(h) \

华为C/C++笔试题&amp;答案

1.static有什么用途?(请至少说明两种) 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变. 2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问.它是一个本地的全局变量. 3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用.那就是,这个函数被限制在声明它的模块的本地范围内使用 2.引用与指针有什么区别? 1) 引用必须被初始化,指针不必. 2) 引用初始化以后不能被改变,指针可以改变所指的对象.