typedef和#define
typedef是重命名的语句,而#define是编译器在编译的时候,将#define定义的关键字来来替换。
比如:
#include <stdio.h>
#define x 5+5
int main(void)
{
printf("%d\n", x*x);//最后结果为35。没有想象的100。所以我们每一次的使用宏替换的时候都要小心翼翼的去将每个元素用括号括起来。
return 0;
}
typedef 也可以重命名一个函数的指针,之后可以继续像使用函数一样,将指针指向函数之后,就可以使用函数的功能,再上几次的博客中我们也有指出typedef的函数指针的命名。
#include <stdio.h>
typedef void (*ptr_func)(int);//重命名一个函数的指针
void func(int a)
{
printf("%d\n", a);
}
int main(void)
{
ptr_func p;//声明一个函数的指针
p = func;//讲指针指向函数
p(2);//调用函数指针指向函数打印2
return 0;
}
/*
Typedef 在C语言中频繁用以声明一个已经存在的数据类型的同义字。也可以用预处理器做类似的事。例如,思考一下下面的例子:
#define dPS struct s *
typedef struct s * tPS;
以上两种情况的意图都是要定义dPS 和 tPS 作为一个指向结构s指针。哪种方法更好呢?(如果有的话)为什么?
这是一个非常微妙的问题,任何人答对这个问题(正当的原因)是应当被恭喜的。答案是:typedef更好。思考下面的例子:
dPS p1,p2;
tPS p3,p4;
第一个扩展为
struct s * p1, p2;
.
上面的代码定义p1为一个指向结构的指,p2为一个实际的结构,这也许不是你想要的。第二个例子正确地定义了p3和p4 两个指针。
晦涩的语法
*/