问题描述
我读囤积内存分配器来源$ C $ c和gnuwrapper.cpp的文件中,有以下code
的#define CUSTOM_MALLOC(x)的CUSTOM_ preFIX(的malloc)(X)
什么是 CUSTOM_ preFIX的含义(的malloc)(X)
?为 CUSTOM_ preFIX
函数?但作为一个功能它没有任何地方所定义。如果它是可变的,那么怎样才能使用的变量,比如 VAR(的malloc)(X)
?
更多code:
的#ifndef __GNUC__
#ERROR这个文件需要GNU编译器。
#万一#包括LT&;&string.h中GT;
#包括LT&;&stdlib.h中GT;
#包括LT&;&stdio.h中GT;
#包括LT&;&malloc.h所GT;
的#ifndef CUSTOM_ preFIX ==>这里看起来就像是一个变量,因此,如果没有定义,然后定义在这里。
#定义CUSTOM_ preFIX
#万一#定义CUSTOM_MALLOC(X)CUSTOM_ preFIX(的malloc)(X)===>什么这是什么意思?
#定义CUSTOM_FREE(X)CUSTOM_ preFIX(免费)(X)
#定义CUSTOM_REALLOC(X,Y)CUSTOM_ preFIX(realloc的)(X,Y)
#定义CUSTOM_MEMALIGN(X,Y)CUSTOM_ preFIX(memalign可)(X,Y)
在您的code,因为CUSTOM_ preFIX被定义为没有什么,字符串 CUSTOM_ preFIX(的malloc)(X)
将扩大到
(的malloc)(X)
这相当于通常的
的malloc(X)
不过,CUSTOM_ preFIX允许开发者选择不同的内存管理功能。例如,如果我们定义
的#define CUSTOM_ preFIX(六)我_ ##˚F
然后 CUSTOM_ preFIX(的malloc)(X)
将扩大至
my_malloc(X)
I am reading source code of hoard memory allocator, and in the file of gnuwrapper.cpp, there is the following code
#define CUSTOM_MALLOC(x) CUSTOM_PREFIX(malloc)(x)
What's the meaning of CUSTOM_PREFIX(malloc)(x)
? is CUSTOM_PREFIX
a function? But as a function it didn't defined anywhere. If it's variable, then how can we use variable like var(malloc)(x)
?
More code:
#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)
In your code, since CUSTOM_PREFIX is defined to be nothing, the string CUSTOM_PREFIX(malloc)(x)
will expand to
(malloc)(x)
which is equivalent to the usual
malloc(x)
However, the CUSTOM_PREFIX allows the developer to choose a different memory management function. For example, if we define
#define CUSTOM_PREFIX(f) my_##f
then CUSTOM_PREFIX(malloc)(x)
will be expanded to
my_malloc(x)
这篇关于在C语言中的宏(#定义)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!