感到困惑的是#define和typedef

com*_*ler 2 c typedef c-preprocessor

#define T Stack_T
typedef struct T *T;
Run Code Online (Sandbox Code Playgroud)

那么,什么是Tstruct T平均,一个是定义#definetypedef

pax*_*blo 8

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

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

typedef对它的影响将变成:

typedef struct Stack_T *Stack_T;
Run Code Online (Sandbox Code Playgroud)

接下来,Stack_T定义为一种类型,指向另一种类型的指针struct Stack_T.该Stack_Tstruct Stack_T是两回事.