#define T Stack_T
typedef struct T *T;
那么T
中的struct T
是什么意思,#define
或typedef
定义的那个?
答案 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_T
和struct Stack_T
是两个不同的东西。
答案 1 :(得分:3)
预处理器只进行文本替换,因此代码看起来像
typedef struct Stack_T *Stack_T;
因此,代码中的每个T
都会先替换为Stack_T
,之后您的编译器会启动,看到typedef
并使用struct Stack_T*
。
最好知道struct Type
和Type
在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
。