C 中的回调函数没有 printf

che*_*em7 0 c

我正在尝试 C 中的回调函数,但我不确定为什么,但出于某种原因 printf 在回调函数中不起作用。例如:

#include <stdio.h>

void call_this_method()
{
    printf("call_this_method called\n");
}
void callback(void (*method))
{
    printf("callback called\n");
    (void) method;
}

int main(int argc, const char * argv[])
{
    callback(call_this_method);
}
Run Code Online (Sandbox Code Playgroud)

如果我尝试运行它,只有“回调调用”会在控制台中打印出来;“call_this_method called”不会被打印出来。这是为什么?

Som*_*ude 6

首先void (*method)是一个指向任何东西的普通指针。它等于void *method。您应该将其声明为指向函数的指针void (*method)(void)

其次,(void) method不调用任何东西。它只是method自己评估一个值,然后丢弃该值(由于强制转换)。通过上述修复,您可以像调用任何其他函数一样调用它:

method();
Run Code Online (Sandbox Code Playgroud)