使用的typedef如果我想声明typedef
某种类型,我会去像这样的语法,在这个例子:函数指针用C
typedef int INT
但是,当我想创造一个typedef
一个功能,我期待下面的语法是一个:
typedef void (*)(int, char) myfunc;
不是正确的一句是:
typedef void (*myfunc)(int, char);
那么为什么第一个不正确?
使用的typedef如果我想声明typedef
某种类型,我会去像这样的语法,在这个例子:函数指针用C
typedef int INT
但是,当我想创造一个typedef
一个功能,我期待下面的语法是一个:
typedef void (*)(int, char) myfunc;
不是正确的一句是:
typedef void (*myfunc)(int, char);
那么为什么第一个不正确?
A typedef
看起来完全像“正常”声明。如果你声明一个函数指针,它应该是这样的:
void (*myfunc)(int, char);
因此,typedef
看起来是一样的,与申报的标识符不参考类型的对象,唯一的区别,但是到了类型别名代替:
typedef void (*myfunc)(int, char);
至于“?为什么” - 好了,因为语言就是这样设计的,但我想,一旦你了解它瓦特orks,它可以说是最简单的方法,不要为typedef
声明引入不同的语法。这种设计遵循最少意外的原则,以不同的方式处理声明将不必要的复杂。
因此,规则不是如下: 如果我有一个称为类型的类型,我可以使用'typedef类型名称'创建一个名为Name的typedef。 但是,规则是: 如果有这样的声明_declarator name_我可以通过关键字'typedef'转发delcarator的名称为typedef。 –
@BiteBytes是的。 PeterJ的答案显示了这适用于typedef'ing数组类型。 –
@BiteBytes:在句法上,'typedef'被视为像'auto'或'extern'这样的存储类说明符,即使它具有不同的含义。所以是的,'typedef'的形式是一个正则声明的形式,只是在其前面加了'typedef'关键字。 –
的基本方法来创建函数指针是void (*myfunc)(int, char);
所以要创建一个新的类型,它是一个函数指针作为参数是 typedef void (*myfunc)(int, char);
,这就是为什么它返回void
,并得到int
和char
第一个是不正确的
在function pointer
之前不需要添加(*)
。
但是,当我想创造一个函数的类型定义,我期待 以下语法是一个:
typedef void (*)(int, char) myfunc;
当然你也可以写你自己的编译器你自己的语言。
但是C语法就是这样。
下面是另一个例子:
typedef char foo[10];
看看[这个答案](https://stackoverflow.com/a/30345939/4265352)。它解释了如何读取C变量和类型声明。 – axiac
typedef是无关紧要的。这就是你如何定义类型的变量。 – StoryTeller
@StoryTeller这不是一个完全重复的,它会询问函数指针的声明语法,而不是* typedef声明。 –