如果我想为某种类型声明typedef
,我会在这个示例中使用类似这样的语法:
typedef int INT
但是当我想为一个函数创建typedef
时,我期待以下语法:
typedef void (*)(int, char) myfunc;
相反,正确的是:
typedef void (*myfunc)(int, char);
那么为什么第一个不正确?
答案 0 :(得分:6)
typedef
看起来与“普通”声明完全相同。如果声明一个函数指针,它将如下所示:
void (*myfunc)(int, char);
因此,typedef
看起来是一样的,唯一的区别是声明的标识符不是引用该类型的对象,而是引用类型别名:< / p>
typedef void (*myfunc)(int, char);
至于“为什么?” - 嗯,因为语言是这样设计的,但我想一旦你理解了它是如何工作的,它可以说是不引入不同语法的最简单方法用于typedef
声明。这种设计遵循最少惊喜的原则,以某种方式处理typedef
声明会不必要地复杂化。
答案 1 :(得分:0)
创建函数指针的基本方法是void (*myfunc)(int, char);
所以要创建一个新的类型,它是一个函数指针,返回void
并获取int
和char
作为参数
typedef void (*myfunc)(int, char);
这就是第一个不正确的原因
无需在(*)
之前添加function pointer
。
答案 2 :(得分:0)
但是当我想为一个函数创建一个typedef时,我很期待 以下语法为:
typedef void (*)(int, char) myfunc;
你当然可以自己编写自己语言的编译器。
但是C语法是这样的。
这是另一个例子:
typedef char foo[10];