#include<stdio.h>
#include<stdlib.h>
typedef void (*fn)(void) FNTYPE;
FNTYPE fn_arr[5];
void fun1(void){
printf("\n I'm func 1 \n");
}
void fun2(void){
printf("\n I'm func 2 \n");
}
fn_arr[0] = &fun1;
fn_arr[1] = &fun2;
int decidefunc(char* inp){
if(inp == NULL){
return 0;
}
else if(*inp == "a"){
return 1;
}
else if(*inp == "b"){
return 0;
}
else if(*inp == "c"){
return 1;
}
else{
return 0;
}
}
void callMyFunc(char* inp){
printf("\n %s \n",__func__);
int idx = decidefunc(inp);
fn_arr[idx]();
}
void do_lengthy_op(char* inp,void (*call)(char *inp)){
printf("\n do_lengthy_operation! \n");
call(inp);
}
int main(){
do_lengthy_op("b",callMyFunc);
return 0;
}
我在回调的简单c程序中遇到上述错误。找不到错误的原因。
答案 0 :(得分:2)
Typedef语句看起来就像变量声明一样,前缀为typedef
。类型的名称与变量名称所在的位置相同,因此它应为typedef void (*FNTYPE)(void) ;
而不是typedef void (*fn)(void) FNTYPE;
您无法在函数外部对数组执行赋值,无论是在函数中还是在数组初始化中执行。
fn_arr[0] = &fun1;
fn_arr[1] = &fun2;
答案 1 :(得分:2)
在解决以下问题后应该可以使用。
要定义pointer-to-function
类型,您需要使用以下内容:
typedef void (*FNTYPE)(void);
要正确比较char
,您需要更改
else if(*inp == "a"){
return 1;
}
else if(*inp == "b"){
return 0;
}
else if(*inp == "c"){
return 1;
}
到
else if(*inp == 'a'){
return 1;
}
else if(*inp == 'b'){
return 0;
}
else if(*inp == 'c'){
return 1;
}
将以下内容移至main()
,因为您无法Code outside functions。
fn_arr[0] = &fun1;
fn_arr[1] = &fun2;