在Linux中,使用GCC编译程序的过程可以被分为四个阶段:
1、预处理(Preprocessing)
2、编译(Compilation)
3、汇编(Assembly)
4、链接(Linking)
在这里我们介绍预处理过程。
首先写一个简单的代码:hello.c
#include <stdio.h>
int main()
{
printf("Hello world!\n");
return 0;
}
预处理阶段实现的功能主要有三个:
①加载头文件
②进行宏替换
③条件编译
1. 加载头文件
相应命令:
gcc –E hello.c
gcc –E hello.c > hello.i
gcc –E hello.c –o hello.i
①对于“gcc -E hello.c”,输入命令如下
gcc -E hello.c
可以看出生成的文件代码直接输出到屏幕,并且此时只有“hello.c”文件。
②对于“gcc -E hello.c > hello.i”
可以看到此时生成了名为“hello.i”的文件。“hello.i”文件代码有很多行,截取最后一部分如下图所示:
2. 进行宏替换
将“hello.c”改为如下图所示代码:
#include <stdio.h>
#define MAX 10
int main()
{
int a[MAX];
printf("Hello world!\n");
return 0;
}
进行预处理,打开“hello.i”,截取最后一部分内容如下,可以看到此时已经进行了宏替换。
3. 条件编译
将“hello.c”改为如下图所示代码
#include <stdio.h>
#define MAX 5
int main()
{
#ifdef MAX
printf("Hello world!\n");
#else
printf("Welcome!\n");
#endif
return 0;
}
进行预处理,打开“hello.i”,截取最后一部分内容如下图所示,可以看到此时已经条件编译。
需要注意的是预处理阶段不做语法检查。