(1)把用户定义的所有的预定义#define展开。 举个例子,如果用户有以下代码: #define Max(a, b) ((a)>(b)?(a):(b)) ... int c = Max(a, b); 经过gcc预处理后,预定义都将展开成如下样子: int c = ((a)>(b)?(a):(b));
(2)把所有的#include的文件内容加载进来。 假如我们有#include <stdio.h>,预处理后程序会用stdio.h的内容替换掉#include <stdio.h>, 最后的程序中,你将找不到<>这样的include,更多的是#include "/usr/include/stdio.h"之类的。 有了这个,你可以知道a)stdio.h在linux下的存放路径,b)FILE结构体的摸样,c)size_t类型的定义,d)其他很多你想知道的
(3)处理条件编译,将不符合条件的代码段删除。 例如,有代码段: #ifdef M printf("M"); #else printf("NM"); #endif 预处理后程序将变成
printf("M");
(因为没有#define M,其他行位置为空,代码printf("NM")将被删除)
|
|