我有以下代码:
#include <stdio.h>
typedef void (*myfunc_t)(int x);
myfunc_t myfunc(int x)
{
printf("x = %d\n", x);
return;
}
int main(void)
{
myfunc_t pfunc = myfunc;
(pfunc)(1);
return 0;
}
当为标准C编译为C99时,出现错误:
prog.c: In function ‘myfunc’:
prog.c:9:6: error: ‘return’ with no value, in function returning non-void [-Werror]
return;
^~~~~~
prog.c:5:14: note: declared here
myfunc_t myfunc(int x)
^~~~~~
prog.c: In function ‘main’:
prog.c:14:26: error: initialization of ‘myfunc_t’ {aka ‘void (*)(int)’} from incompatible pointer type ‘void (* (*)(int))(int)’ [-Werror=incompatible-pointer-types]
myfunc_t pfunc = myfunc;
^~~~~~
SO中的一些问题已经解释了myfunc_t
的返回类型是void
(例如here)。那么,为什么会出现这些错误?
请注意,如果将myfunc
的类型从myfunc_t
更改为void
,则程序会生成OK。
定义typedef void(* myfunc_t)(int x);没有回报;声明。这样做之后应该可以工作。
myfunc_t myfunc(int x)
此语句创建一个函数myfunc
,该函数返回一个函数指针myfunc_t
但是在函数定义中,您什么都不返回。同样,这也会使myfunc
与myfunc_t
类型不兼容(返回值不同)
您需要将函数声明并定义为
void myfunc(int x)
{
...
}