typedef int (*P)(char *(*)());
int (*P)(char *(*)());
两者似乎对我做同样的事情,那里的typedef
是什么?
答案 0 :(得分:9)
第一个声明一个名为P的类型,您可以在其他变量的声明中使用它。第二个声明了相同类型的变量。
出于说明目的:
typedef int (*P)(char *(*)());
int main() {
int (*Q)(char *(*)());
P R;
}
在此示例中,变量Q
和R
具有完全相同的类型。
答案 1 :(得分:4)
typedef
将P
定义为函数指针 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 *(*)());