这两个C语言声明有什么区别?

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

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

对我来说,两者似乎都在做同样的事情,那么 typedef 是用来干什么的?

3个回答

9
第一个声明了一个名为P的类型,您可以在其他变量的声明中使用该类型。第二个声明了同一类型的一个变量。
举个例子说明:
typedef int (*P)(char *(*)());

int main() {
    int (*Q)(char *(*)());
    P R;
}

在这个例子中,变量QR具有完全相同的类型。

1
你太厉害了!4天内获得945个声望值!+1 - alex
哈哈,谢谢。是啊...我应该很快出去呼吸新鲜空气。 - cdhowie
那新鲜的空气被高估了 :D - alex
那么阳光和锻炼也是我最不喜欢的两件事情之一! - cdhowie

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

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

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

您可以使用

P p;

这将相当于

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

1

简单的答案是你通过typedef创建了一个新的数据类型。

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

unsigned int xyz;

所以我需要在所有地方都输入无符号..如果我忘记在某个地方输入无符号,那么在代码发布后要找出错误会非常困难。所以简单的方法是

typedef unsigned int uint;

现在你可以使用uint作为数据类型。所以,每当解析器遇到uint时,它将把它读取为无符号整数。

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

P xyz ; 

会被解析为

int (*xyz)(char *(*)());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接