GCC -E 参数

获取更多嵌入式、Linux学习资料,获取独家嵌入式Linux学习路线地图,欢迎加群:398294860,观看更专业、更系统地嵌入式视频教程,请关注:wanglitao.taobao.com

如果只对一段C语言程序做预处理操作,而不进行编译,可以通过gcc -E 参数来完成。如下面的一段程序,在程序中分别使用#include包含头文件,使用#define定义宏,使用#ifdef条件编译。

#include <stdio.h>

#define PI  3.14

int main(void)
{
    printf("hello zhaixue.cc!\n");
    printf("PI = %f\n", PI);
#ifdef DEBUG
    printf("debug mode\n");
#else
    printf("release mode\n");
#endif
    return 0;
}

对上面的C源程序使用gcc -E进行预处理,就可以生成原汁原味的C程序:

# gcc -E hello.c > hello.i
# ls
hello.c  hello.i

# cat hello.i
...
extern int printf (const char *__restrict __format, ...);
...
int main(void)
{
    printf("hello zhaixue.cc!\n");
    printf("PI = %f\n", 3.14);



    printf("release mode\n");

    return 0;
}

通过预处理后的C程序,使用#include包含的的头文件就地展开,我们可以看到stdio.h头文件中printf函数的声明。程序中使用#define定义的宏PI,也会在实际使用的地方展开为实际的值。使用#ifdef定义的条件编译,会根据条件判断,选择实际要编译的代码分支。

《Linux三剑客》视频教程,从零开始快速掌握Linux开发常用的工具:Git、Makefile、vim、autotools、debug,免费赠送C语言视频教程,C语言项目实战:学生成绩管理系统。详情请点击淘宝链接:Linux三剑客