Функция без имени

Я хотел бы знать, как назвать эту функцию? И где я могу найти его реализацию, если у него нет имени?

extern void (*_malloc_message)(const char* p1, const char* p2, const char* p3, const char* p4);

Ответ 1

Это не функция. Это выражение, в котором говорится, что _malloc_message является указателем на функцию с возвратом типа void и параметрами, указанными.

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

Затем вы должны использовать _malloc_message как если бы это была функция.

Ответ 2

_malloc_message - это указатель на функцию.

Где-то в коде вы найдете определение функции, прототип которой выглядит следующим образом:

void foo (const char* p1, const char* p2, const char* p3, const char* p4);

Затем вы назначаете функцию указателю на функцию :.

_malloc_message = foo;

и назовите его так:

(*_malloc_message)(p1, p2, p3, p4);

Вопрос в том, почему вы не можете напрямую вызвать foo. Одна из причин заключается в том, что вы знаете, что foo нужно вызывать только во время выполнения.

Ответ 3

_malloc_message определяется в malloc.c jemalloc:

Вот как вы можете использовать это:

extern void malloc_error_logger(const char *p1, const char *p2, const char *p3, const char *p4)
{
    syslog(LOG_ERR, "malloc error: %s %s %s %s", p1, p2, p3, p4);
}

//extern
_malloc_message = malloc_error_logger;

malloc_error_logger() будет вызываться при различных ошибках библиотеки malloc. malloc.c имеет больше деталей.