关于typedef

时间:2016-02-24 01:55:57

标签: c typedef

"In effect, typedef is like #define, except that since it is interpreted by 
 the   compiler, it can cope with textual substitutions that are beyond the 
 capabilities of the preprocessor."

我们如何理解上述句子? 有两种关于typedef的用法,我无法理解:

1. typedef char Line[10];
2. typedef int (*p)(char*,char*)

在我看来,typedef A B表示B是A的别名,所以" typedef char Line [10]"行[10]是char的别名! ( p)(char ,char *)是int的别名!没有!显然不是!谁能解释一下呢?

2 个答案:

答案 0 :(得分:0)

typedef和宏之间的一个区别是typedef可以包含宏不能包含的声明者信息。例如,假设你有:

int (*p)(int, double);

这声明p是一个指向int值函数的指针,该函数将intdouble作为参数。

使用typedef,您可以定义与此完全匹配的新数据类型:

typedef int (*t)(int, double);

然后,您可以使用以下内容获取p的等效定义:

t p;

请注意,您仍然可以使用t的完整声明符语法。例如,您可以:

t q[10];

这将声明一个包含t类型的10个元素的数组。没有typedef,这将是:

int (*q[10])(int, double);

答案 1 :(得分:0)

typedef char Line[10];

这定义了' Line'可用于创建10个字符的数组。例如:

Line L;

其中L是10个字符的数组。

typedef int (*p)(char*,char*);

为函数定义一个函数指针,该函数返回一个int,并接受(char *,char *)。这用于制作使用函数指针的代码,更具可读性。