1.预处理理论
源码.c–>(预处理)–>预处理过的.c文件(.i)–>(编译)–>汇编文件.s–>(汇编)–>目标文件.o–>(链接)–>elf可执行文件
2…编译器本生目的是编译源代码,将c的源代码转换成.s的汇编代码。编译器聚集核心功能后。就剥离了一些非核心的功能到预处理器去。
(1)gcc编译时可以给一些参数做一些设置,譬如gcc xx.c -o xx可以指定可执行文件的名称,譬如gcc xx.c -c -o xx.o可以指定之编译不连接,也可以生成.o的目标文件。
(2)gcc -E xx.c -o xx.i可以实现只预处理不编译。一般情况下没必要只预处理不编译,但有时候这种技巧可以帮助我们调debug程序。
#include <stdio.h>
#define Num2
#define Num1 1
int main(void)
{
int a = 0;
int b = 0;
#if (Num1 == 0)
printf("#if\n");
a = 111;
#else
printf("#else\n");
a = 222;
#endif
printf("a = %d\n",a);
#ifdef Num1 //如果Num1定义了执行下面内容
printf("#ifdef\n");
b = 111;
#else
printf("#else\n");
b = 222;
#endif
printf("b = %d\n",b);
return 0;