【发布时间】:2019-02-08 14:34:21
【问题描述】:
我想知道如何调用这个函数?如果它没有名称,我在哪里可以找到它的实现?
extern void (*_malloc_message)(const char* p1, const char* p2, const char* p3, const char* p4);
【问题讨论】:
-
这是一个函数指针...
标签: c++ function function-pointers
我想知道如何调用这个函数?如果它没有名称,我在哪里可以找到它的实现?
extern void (*_malloc_message)(const char* p1, const char* p2, const char* p3, const char* p4);
【问题讨论】:
标签: c++ function function-pointers
这不是一个函数。这是一个声明,表明_malloc_message 是一个指向函数的指针,返回类型为void 和给定的参数。
为了使用它,您必须为它分配具有该参数、返回类型和参数类型的函数的地址。
然后你会使用_malloc_message,就好像它是一个函数一样。
【讨论】:
_malloc_message 会指向其中之一,这取决于通过检查程序明显的条件。
_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 只需要在运行时调用。
【讨论】:
extern,它可能会从不同的编译单元中调用。
_malloc_message 定义在 jemalloc 的 malloc.c 中:
你可以这样使用它:
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 有更多细节。
【讨论】: