在C语言中,typedef和define都可以设置变量的别名,但是typedef被视为一种彻底的封装,为类型引入一个别名,声明之后不能再往里面加入别的东西,宏则不然。
1. define可以进行扩展但是typedef不行(note1)
#define peach int unsigned peach; //OK typedef banana int unsigned banana; //NOK
2. define在连续定义中定义与typedef不同
#define apple char* apple val1, val2; //val1 is char*, val2 is char typedef apple char* apple val1, val2; // val1 and val2 are all char*
Note1: 根据C++ primer p104, 所谓的不行并不是说会引起编译错误,而是结果不符合常规:
typedef char* cstring extern const cstring cstr; //equal to char* const cstr, NOT constr char* cstr