功能指针在C中使用typedef

时间:2017-07-19 12:05:28

标签: c

如果我想为某种类型声明typedef,我会在这个示例中使用类似这样的语法:

typedef int INT

但是当我想为一个函数创建typedef时,我期待以下语法:

typedef void (*)(int, char) myfunc;

相反,正确的是:

typedef void (*myfunc)(int, char);

那么为什么第一个不正确?

3 个答案:

答案 0 :(得分:6)

typedef看起来与“普通”声明完全相同。如果声明一个函数指针,它将如下所示:

void (*myfunc)(int, char);

因此,typedef看起来是一样的,唯一的区别是声明的标识符不是引用该类型的对象,而是引用类型别名:< / p>

typedef void (*myfunc)(int, char);

至于“为什么?” - 嗯,因为语言是这样设计的,但我想一旦你理解了它是如何工作的,它可以说是不引入不同语法的最简单方法用于typedef声明。这种设计遵循最少惊喜的原则,以某种方式处理typedef声明会不必要地复杂化。

答案 1 :(得分:0)

创建函数指针的基本方法是void (*myfunc)(int, char);

所以要创建一个新的类型,它是一个函数指针,返回void并获取intchar作为参数 typedef void (*myfunc)(int, char);

这就是第一个不正确的原因

无需在(*)之前添加function pointer

答案 2 :(得分:0)

  

但是当我想为一个函数创建一个typedef时,我很期待   以下语法为:

     

typedef void (*)(int, char) myfunc;

你当然可以自己编写自己语言的编译器。

但是C语法是这样的。

这是另一个例子:

typedef char foo[10];