C语言中的宏(#define)

时间:2010-05-22 08:10:37

标签: c macros c-preprocessor

我正在阅读囤积内存分配器的源代码,并且在gnuwrapper.cpp的文件中,有以下代码

#define CUSTOM_MALLOC(x)     CUSTOM_PREFIX(malloc)(x)  

CUSTOM_PREFIX(malloc)(x)的含义是什么? CUSTOM_PREFIX是一个函数吗?但作为一个功能,它没有在任何地方定义。如果它是变量,那么我们如何使用var(malloc)(x)等变量?

更多代码:

#ifndef __GNUC__
#error "This file requires the GNU compiler."
#endif

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


#ifndef CUSTOM_PREFIX   ==> here looks like it's a variable, so if it doesn't define, then define here.
#define CUSTOM_PREFIX
#endif

#define CUSTOM_MALLOC(x)     CUSTOM_PREFIX(malloc)(x)    ===> what's the meaning of this?
#define CUSTOM_FREE(x)       CUSTOM_PREFIX(free)(x)
#define CUSTOM_REALLOC(x,y)  CUSTOM_PREFIX(realloc)(x,y)
#define CUSTOM_MEMALIGN(x,y) CUSTOM_PREFIX(memalign)(x,y)

3 个答案:

答案 0 :(得分:6)

在您的代码中,由于CUSTOM_PREFIX被定义为空,字符串CUSTOM_PREFIX(malloc)(x)将扩展为

(malloc)(x)

相当于通常的

malloc(x)

但是,CUSTOM_PREFIX允许开发人员选择不同的内存管理功能。例如,如果我们定义

#define CUSTOM_PREFIX(f) my_##f

然后CUSTOM_PREFIX(malloc)(x)将扩展为

my_malloc(x)

答案 1 :(得分:0)

CUSTOM_PREFIX被定义为无效,因此它会消失,留下(malloc)(x),与malloc(x)相同。为什么?我不知道。也许代码中的其他地方将CUSTOM_PREFIX设置为其他地方。

答案 2 :(得分:0)

猜测,它是一个宏,它将对malloc(x)等的调用更改为:

DEBUG_malloc( x );

您可以选择自己提供宏,为函数提供自定义前缀,或者不在哪种情况下不更改名称。