prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 1.13

Q使用typedef#define定义用户自定义类型有什么区别?


A一般来说,typedef是更受青睐的,部分原因在于它们可以正确地编码指针类型。例如,请考虑以下声明:

	typedef char *String_t;
	#define String_d char *
	String_t s1, s2;
	String_d s3, s4;
s1, s2,而s3都声明为char *,但是s4被声明为char,这可能不是预期的。(另请参阅问题 1.5。)

#defines 的优点是#ifdef可以作用于它们(另请参阅问题 10.15)。另一方面,typedefs 的优点是它们遵守作用域规则(也就是说,它们可以被声明为函数或块的局部变量)。

另请参阅问题 1.172.2211.1115.11

参考文献:K&R1 第 6.9 节,第 141 页
K&R2 第 6.7 节,第 146-7 页
CT&P 第 6.4 节,第 83-4 页


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管