【问题标题】:Function without name没有名字的函数
【发布时间】: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


【解决方案1】:

这不是一个函数。这是一个声明,表明_malloc_message 是一个指向函数的指针,返回类型为void 和给定的参数。

为了使用它,您必须为它分配具有该参数、返回类型和参数类型的函数的地址

然后你会使用_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 只需要在运行时调用。

【讨论】:

  • 这不是我的代码。我正在尝试通过阅读其他人的代码来学习高级 C++。除了调用步骤之外,还有所有这些步骤。这很有趣,也许该代码中不再使用该功能并且作者忘记删除它。
  • @Chyu • 有几本关于学习高级C++ 的好书。这是精选的书籍清单:stackoverflow.com/questions/388242/…
  • @Chyu 调用可能隐藏在宏中。此外,由于它被声明为extern,它可能会从不同的编译单元中调用。
【解决方案3】:

_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 有更多细节。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 2011-01-24
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    • 2015-12-16
    • 2022-07-14
    相关资源
    最近更新 更多