这两个声明在c中有什么区别?

时间:2010-11-11 01:11:10

标签: c syntax

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

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

两者似乎对我做同样的事情,那里的typedef是什么?

3 个答案:

答案 0 :(得分:9)

第一个声明一个名为P的类型,您可以在其他变量的声明中使用它。第二个声明了相同类型的变量

出于说明目的:

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

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

在此示例中,变量QR具有完全相同的类型。

答案 1 :(得分:4)

typedefP定义为函数指针 type 。第二个版本将P定义为函数指针。

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

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

你可以使用

P p;

将等同于

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

答案 2 :(得分:1)

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

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

unsigned int xyz;

所以在这里我将不得不在任何地方键入unsigned。如果我忘记在某处键入unsigned,如果代码被释放则很难弄明白。这么简单的方法就是

typedef unsigned int uint;

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

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

P xyz ; 

将被解析为

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