【转】#include_next <filename.h>
转载自 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