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.17、2.22、11.11 和 15.11。
参考文献:K&R1 第 6.9 节,第 141 页
K&R2 第 6.7 节,第 146-7 页
CT&P 第 6.4 节,第 83-4 页