程序生成的过程:
1. 预处理: .i文件
头文件的展开:
宏的替换
预处理指令解析 #ifndef ,#if #ifdef #else #elif #endif
去掉注释
2.编译: 预处理后的文件 生成汇编文件 .asm(汇编代码)
词法解析、语法解析、语义分析、优化
3.汇编:汇编文件进一步处理 ,生成目标机器指令(二进制文件.obj)
4.链接:将多个目标文件(库文件)链接生成可执行程序(.exe,.out)。
// 替换作用,
#define AA 8
/* 反斜杠\: 连接当前行和下一行 ,最后一行一般不加 \ ,后面不要有任何字符(空格、tab、注释) */
#define BB for(int i=0;i<AA;i++){\
cout<<i<<endl;\
}
// 宏可以带参数:替换作用,不会做表达式的计算和求解
#define CC(NUM) for(int i=0;i<NUM;i++){\
cout<<i<<endl;\
}
#define Mul(A,B) ((A)*(B))
// ## 拼接
#define DD()\
int a##b = 20;
#define EE(CLASS)\
CLASS obj##CLASS;\
obj##CLASS.show();
//# : 将参数转成字符串 ,相当于加双引号
#define FF(PARAM)\
cout<<#PARAM<<endl;
//#@ 转成字符,相当于加单引号
#define GG(PARAM)\
char a = #@PARAM;