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
的指针。