编译工具链=预处理器+编译器+汇编器+链接器+......
预处理器就是干杂事,例如include、注释、条件编译、宏定义。
预处理后,宏定义就被替换了,但是typedef还在,说明typedef是不由编译器处理的,而是由编译器处理的。
#define pchar char*
pchar p3;
pchar p1,p2;
typedef char* PCHAR
____________________预处理后______________________________
char* p3;
char*p1,p2;
typedef char* PCHAR (依旧还在)
<xxx.h>与“xxx.h”的区别, <xxx.h>的头文件由编译器或操作系统配置区提供。“xxx.h”会先在当前目录寻找,再去系统或编译器目录寻找头文件。
头文件会在预编译(预处理)阶段被展开(除了注释之外的包括空格空行都会搬过去)。
条件编译(#if):希望有多种配置。
#define NUM
.
.
.
int a=0;
#ifdef NUM
a=111;
#elif
a=222;
#else
#endif;
就算NUM放在别的头文件里,且被包含在#ifdef前,都有作用,这也就是头文件放在宏定义前面的原因之一。
#ifxxx是预处理的指令之一,在预处理结束后将判断成功的进行保留,不符合的区域会被清理。
#ifdef xxx判定在此之前是否定义过xxx,如果定义则就会成立。预处理的语句不属于编译器,也就是说明不属于正式语句,在预处理结束后会进行替换与清理。
#elif(条件)使用方法与if...else...一样。