C/C++ 预处理器 (转)
来源:互联网 发布:python 语音合成 编辑:程序博客网 时间:2024/05/12 00:30
从会敲代码开始,我们就知道编译器的重要性,没有这东西,我们的代码就是一堆字符而已。而编译器编译程序的步骤
主要有四个——预处理、编译、汇编和链接,最后得到可执行的目标文件。
四个步骤各自的工作会是怎么样的呢?不知为何,对这个东西有了点兴趣。以GCC为例,主要工作是这样的:
预处理阶段会调用cpp,
编译阶段会调用cc得到汇编程序,
汇编阶段调用as得到目标代码,
链接时调用链接程序ld 得到可执行文件。
由于四个步骤(其实本质上就是四个可执行代码)早就被编译器打包,一并替我们打理了,我们的工作是轻松了,
对于这几个过程究竟是怎样进行的,恐怕还是有个问号在脑中打转。
后面3个阶段的具体工作机制,我没有深入了解过,但还是可以说说预处理的。
在探究预处理的操作机制之前,了解预处理器是个什么东西还是很有必要的。
预处理器不止一种,而C/C++的预处理器就是其中最低端的一种——词法预处理器。
这种预处理器做的主要是进行文本替换、宏展开、删除注释这类简单工作。
再具体一点就是,预处理器cpp就是负责展开源文件中的宏,并把”#include ”的内容插入这类的工作。
空口无凭,直接上代码。其实也不算空口,毕竟也谷歌、维基过了。
源代码prepro.c 如下:
使用-E参数, 让GCC在预处理之后停止编译过程。执行:
那么,这时预处理后的结果是怎样的呢?贴图如下:
有图有真相,我们可以看到:
预处理器用stdio.h的内容替代了#include <stdio.h>
这一行;而宏PI也被替换为3.1415926;而且注释也被删除了。
总结:
★ C/C++预处理器什么都不会做,只是做宏替换和文本替换。
★ C/C++预处理是不会做任何语法检查的,不仅是因为它不具备语法检查功能,也因为预处理命令
不属于C/C++语句(这也是定义宏时不要加分号的原因),语法检查是编译器要做的事情。
★ 通过预处理之后,我们得到的是也仅仅是真正的源代码。
★ 还有就是,GCC这个东西确实很强大。如果是用VC这种IDE,恐怕就不能看到,预处理原来是这么个好玩的东西了。
原文查看:http://www.cnblogs.com/chenwu128/archive/2012/06/01/2531425.html
- C/C++ 预处理器 (转)
- C预处理器1
- C预处理器标识
- C语言预处理器
- C预处理器简介
- C语言-预处理器
- C预处理器
- C中的预处理器
- c预处理器
- C预处理器#、##、__VA_ARGS__
- C的预处理器
- C预处理器
- c/c++预处理器
- 【C语言】预处理器
- C预处理器
- C/C++预处理器
- C预处理器
- C 预处理器
- flex 堆叠图 type="stacked"
- 面向对象部分_204
- office设置保护色
- Android SDK编译 ——如何将自己源代码加入android.jar
- 洗牌程序
- C/C++ 预处理器 (转)
- OpenStack中的Heat分析
- Unity3d NGUI的使用(三)(UIButton及Anchor实际使用)
- C++内存分配秘籍—new,malloc,GlobalAlloc的区别与详解
- HTTPS原理
- web.xml中load-on-startup的作用
- 解决SecureCRT中文显示乱码
- 面向对象部分_205
- 经纬财富:六盘水基本面喜忧参半 白银先涨后跌