You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将函数作为参数传递?示例中fooA为何未执行?

问题原因及修复方案

你的代码存在两个关键问题,导致fooA无法被执行:

1. 函数参数类型声明错误

fooB的参数fooC没有指定正确的类型,C/C++要求必须明确参数类型。这里需要把fooC声明为函数指针,指向一个无参数、返回值为void的函数,正确的参数类型是void (*fooC)()。

2. 全局作用域不能直接执行函数调用

你直接在全局作用域写fooB(fooA);是非法的,全局范围内只能存在变量/函数的声明或定义,执行语句必须放在函数内部(比如main函数中)。

修正后的代码示例

void fooA() {
    // do something,比如加个输出验证
    printf("fooA 被执行了\n");
}

// 正确声明函数指针类型的参数
void fooB(void (*fooC)()) {
    fooC();
}

int main() {
    fooB(fooA); // 在main函数内调用fooB,传入fooA的地址
    return 0;
}

如果是C++环境,还可以用std::function来更简洁地处理函数参数,示例如下:

#include <functional>

void fooA() {
    printf("fooA 被执行了\n");
}

void fooB(std::function<void()> fooC) {
    fooC();
}

int main() {
    fooB(fooA);
    return 0;
}

内容的提问来源于stack exchange,提问作者Neli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 07:30:48