Функция без имени - PullRequest
       9

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

0 голосов
/ 03 сентября 2018

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

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

Ответы [ 3 ]

0 голосов
/ 03 сентября 2018

_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 нужно вызывать только во время выполнения.

0 голосов
/ 17 мая 2019

_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 есть больше деталей.

0 голосов
/ 03 сентября 2018

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

Для того, чтобы использовать его, вам необходимо присвоить ему адрес функции с такой арностью, типом возвращаемого значения и типами параметров.

Тогда вы бы использовали _malloc_message, как если бы это была функция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...