转载自 http://bbs.csdn.net/topics/390381450
#include_next仅用于特殊的场合. 它被用于头文件中(#include既可用于头文件中, 又可用于.c文件中)来包含其他的头文件
意思就是include下一个(除本文件)文件名为 filename.h 的头文件
作用是这样的,就是你想用自己的函数代替其他库函数,但是
1. 不想修改源代码,
2. 不能修改原来的头文件
这是就可以用#include_next了。
下面的例子用在不改变源代码和头文件的情况下,实现了记录malloc函数调用情况。
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 */
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
/**
* @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