什么';c语言中这两个声明的区别是什么?

什么';c语言中这两个声明的区别是什么?,c,syntax,C,Syntax,两者似乎对我做了相同的事情,typedef是做什么的?typedef将p定义为函数指针类型。第二个版本将P定义为函数指针 类型可用于声明变量。之后 typedef int (*P)(char *(*)()); int (*P)(char *(*)()); 你可以用 typedef int (*P)(char *(*)()); 这相当于 P p; 第一个声明了一个名为p的类型,您可以在声明其他变量时使用该类型。第二个声明了同一类型的变量 为了说明目的: int (*p)(char *(*)

两者似乎对我做了相同的事情,
typedef
是做什么的?

typedef将
p
定义为函数指针类型。第二个版本将
P
定义为函数指针

类型可用于声明变量。之后

typedef int (*P)(char *(*)());

int (*P)(char *(*)());
你可以用

typedef int (*P)(char *(*)());
这相当于

P p;
第一个声明了一个名为p的类型,您可以在声明其他变量时使用该类型。第二个声明了同一类型的变量

为了说明目的:

int (*p)(char *(*)());

在本例中,变量
Q
R
的类型完全相同。

简单的答案是您正在通过typedef创建一个新的数据类型

让我们举一个简单的例子,在嵌入式系统中,我们只使用无符号数字。 现在我的第一条路是写作

typedef int (*P)(char *(*)());

int main() {
    int (*Q)(char *(*)());
    P R;
}
所以在这里,我必须在任何地方键入unsigned。。如果我忘记在某个地方键入unsigned,那么很难确定代码是否已发布。这么简单的方法就是

unsigned int xyz;
现在您可以使用uint作为数据类型。所以,每当解析器遇到uint时,它都会将其读取为unsigned int

因此,在您的示例中,可以在代码中使用p作为数据类型。就像第一个例子一样

typedef unsigned int uint;
将被解析为

P xyz ; 

你着火了,伙计!945代表在4天+哈哈,谢谢。是 啊我可能应该,你知道,很快出去呼吸新鲜空气。这种新鲜空气被高估了:DSo是阳光和锻炼。。。我最不喜欢的两件事!
int (*xyz)(char *(*)());