为什么使用typedef-ed函数是错误?

问题描述 投票:0回答:2

我有以下代码:

#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。

c function typedef c99
2个回答
0
投票

定义typedef void(* myfunc_t)(int x);没有回报;声明。这样做之后应该可以工作。


0
投票
myfunc_t myfunc(int x)

此语句创建一个函数myfunc,该函数返回一个函数指针myfunc_t

但是在函数定义中,您什么都不返回。同样,这也会使myfuncmyfunc_t类型不兼容(返回值不同)

您需要将函数声明并定义为

void myfunc(int x) 
{
     ...
}
© www.soinside.com 2019 - 2024. All rights reserved.