是否可以将隐式函数作为函数指针传递给C?

DiJ*_*uMx 2 c function-pointers

最近我发现可以通过在函数调用中将它转换为函数来将隐式数组传递给函数

void foo(int* array);
foo((int[4]) {1,2,3,4});
Run Code Online (Sandbox Code Playgroud)

但是,我想知道在将函数指针传递给函数时是否可以执行相同的操作,如下所示:

void bar(void (*foobar)(void));
bar((void) {printf("foobar\n");});
Run Code Online (Sandbox Code Playgroud)

所以甚至可以这样做吗?

我想知道的原因是,如果我有一大块代码可能有一定的循环结构,但核心功能在实例之间发生变化,我不想让我的代码丢失多个临时函数只是为了通过他们到另一个功能.因此希望能够在参数中定义临时函数.

非常感谢

小智 5

不,不是标准C.你有两个非标准替代品,但是:

一.GCC的"嵌套函数"扩展(仅限GCC):

void call(void (*fn)())
{
    fn();
}

void somefunc()
{
    void tmp_func()
    {
        printf("Hello world!\n");
    }
    call(tmp_func);
}
Run Code Online (Sandbox Code Playgroud)

二,Apple的区块(最近的GCC和Clang):

void call(void (^blk)())
{
    blk();
}

call(^{
    printf("Hello world!\n");
});
Run Code Online (Sandbox Code Playgroud)