宏定义的一个常见用途是 起别名
#define FOOTYPE struct foo
FOOTYPE a;
这样定义的优点是可以增强C语言的可移植性,但是会带来一个很隐蔽的问题,如下:
#define T1 struct foo *
T1 a,b;
宏定义只是起别名,因此将其带入到定义语句后,将变成:
struct foo * a,b;
可见第二个变量b并没有按照预想定义为结构体指针。
所以此种类型定义最好采用typedef,即
typedef struct foo * T2 ;
T2 a,b;