如何将函数作为参数传递?示例中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
相关产品推荐
相关产品推荐

