预处理过程:概念及命令行

本文学习编译器的预处理过程的概念,以及简单的通过命令行进行预处理的过程。Hightec编译器版本是tricore v4.9.1.0。

1 预处理过程

预处理过程是整个编译过程的第一步。以C语言为例,预处理的输入文件是c文件和h文件,输出文件是i文件。
在这里插入图片描述
在预处理过程中,预处理器(Preprocessor)会分析预处理指令(包括#include头文件和#define宏定义等)以及去除源代码中的注释。

通常来说,编译器会直接将c文件编译成o文件,然后再去交给链接器链接为elf文件。如果希望通过命令行仅仅将c文件预处理成为i文件,只要在命令行中加上-E参数,就可以使编译器在预处理后停止下来,输出预处理后的源文件。

2 通过命令行进行预处理

本章节会通过简单的命令行来对文件进行预处理,并且比较一下输入和输出,对预处理有一个直观的认识。

1)首先,需要准备好源文件和头文件。这里博主偷懒没有自己写,而是直接用了以前Simulink生成的代码。具体可以参照《Simulink代码生成: Embedded Coder配置》这篇博客。
在这里插入图片描述
2)打开demo.c文件,简单看一下其中和预处理有关的元素。
在这里插入图片描述
首先,对于#include包含头文件,会被预处理器读取,并添加到源文件中。如果嵌套包含了头文件,就会一层一层地展开。其次,对于绿色的注释,会被预处理器删除掉。

3)打开命令提示符,切换到c文件和h文件所在的路径,并运行以下指令。

tricore-gcc -E demo.c -o demo.i

在这里插入图片描述
然后就会在同一个路径文件夹中生成demo.i文件。
在这里插入图片描述
4)通过Notepad++或者记事本,可以打开这个demo.i文件。可以观察到,rtwtypes.h文件的typedef定义被展开到了源文件中。
在这里插入图片描述
在往下拉,可以看到全局变量和函数的定义。值得注意的是,所有的注释信息全都被抹除了。
在这里插入图片描述

3 总结

预处理过程是编译最开始的过程,也比较好理解。后续博主会用本文的命令行的方法,继续研究预处理过程中的一些问题。

>>返回个人博客总目录

猜你喜欢

转载自blog.csdn.net/u013288925/article/details/114270099
今日推荐