typedef
Typedef 的缺点
typedef 可能导致大型 C 程序中命名空间的污染。
Typedef 结构的缺点
此外,没有标签名称的 typedef’d 结构是不必要的头文件之间的排序关系的主要原因。
考虑:
#ifndef FOO_H
#define FOO_H 1
#define FOO_DEF (0xDEADBABE)
struct bar; /* forward declaration, defined in bar.h*/
struct foo {
struct bar *bar;
};
#endif
有了这样的定义,不使用 typedefs,编译单元可以包含 foo.h 来获得 FOO_DEF 的定义。如果它不试图取消引用 foo 结构的 bar 成员,则不需要包含 bar.h 文件。
Typedef vs #define
#define 是一个 C 预处理器指令,它也用于定义类似于 typedef 的各种数据类型的别名,但有以下区别:
-
typedef仅限于为类型提供符号名称,因为#define也可用于定义值的别名。 -
typedef解释由编译器执行,而#define语句由预处理器处理。 -
请注意,
#define cptr char *后跟cptr a, b;与typedef char *cptr;不同,后跟cptr a, b;。使用#define,b是一个普通的char变量,但它也是typedef的指针。