宏不是类型定义
宏的一个常见用途是,使多个不同变量的类型可在一个地方说明:
#define FOOTYPE struct foo
FOOTYPE a;
FOOTYPE b, c;
这样,编程人员只需在程序中改动一行代码,即可改变a,b,c的类型,而与a,b,c在程序的什么地方声明无关。
宏定义的这种用法有一个优点---可移植性,得到了所有C编译器的支持。
但是,我们最好还是使用类型定义:
typedef struct foo FOOTYPE;
这个语句设置FOOTYPE为一个新的类型,与struct foo完全等效。
使用typedef的方式更通用一些。
#define T1 struct foo *
typedef struct foo *T2;
T1 a, b;
T2 c, d;
第一个声明被扩展为:
struct foo *a, b;
第二个声明被扩展为:
struct foo *c, *d;