感到困惑的是#define和typedef

时间:2011-03-22 09:51:34

标签: c typedef c-preprocessor

#define T Stack_T
typedef struct T *T;

那么T中的struct T是什么意思,#definetypedef定义的那个?

4 个答案:

答案 0 :(得分:8)

#define指令在编译过程的早期被替换(转换阶段4,直到阶段7才实际编译,这些阶段及其中发生的事情在标准的第5.1.1.2节中详细说明) 。

#define只会将T预处理令牌更改为Stack_T

这对typedef的影响将变为:

typedef struct Stack_T *Stack_T;

在此之后,Stack_T被定义为一种类型,指向另一种类型struct Stack_T的指针。 Stack_Tstruct Stack_T是两个不同的东西。

答案 1 :(得分:3)

预处理器只进行文本替换,因此代码看起来像

typedef struct Stack_T *Stack_T;

因此,代码中的每个T都会先替换为Stack_T,之后您的编译器会启动,看到typedef并使用struct Stack_T*

最好知道struct TypeType在C ++中是相同的,而不是在C中。

答案 2 :(得分:0)

由于#define在预编译中处理,而struct在编译中处理,因此在预编译之后,您将typedef struct T *T;看起来像这样:typedef struct Stack_T *Stack_T;

答案 3 :(得分:0)

T代表Stack_T因此,您可以将typedef读为:

typdef struct Stack_T *Stack_T;

因此,在编译器编译期间,代码中的每个T都会替换为Stack_T