Макросы на языке C (#define)

Я читаю исходный код распределителя памяти накопителя, а в файле 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  #include  #include  #include  #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) 

В вашем коде, поскольку 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) 

CUSTOM_PREFIX определяется как ничего, поэтому он просто исчезнет, ​​оставив позади (malloc)(x) , что совпадает с malloc(x) . Зачем? Я не знаю. Возможно, другие места в коде CUSTOM_PREFIX задают еще кое-что.

Предположим, что это макрос, который меняет обращения к malloc (x) и т. Д. Во что-то вроде:

 DEBUG_malloc( x ); 

Вы можете сами настроить макрос, чтобы предоставить индивидуальный префикс для функций, или нет, и в этом случае имена не будут изменены.