预处理器、编译器、汇编、链接

栏目: 编程语言 · 发布时间: 6年前

内容简介:预处理器、编译器、汇编、链接

预处理器、编译器、汇编、链接

预处理器(cpp)

C/C++的预处理器是最低端的一种—–词法预处理器,主要是进行文本替换、宏展开、删除注释、把头文件内容包含进来这类简单工作。

  • gcc -E 选项可得到预处理后的结果,预处理结果会显示到屏幕上,如果需要保存,则得需要重定向,扩展名为 .i;
  • C/C++预处理不做任何语法检查,不仅是因为它不具备语法检查功能,也因为预处理命令不属于C/C++语句(这也是定义宏时不要加分号的原因),语法检查是编译器要做的事情;
  • 预处理之后,得到的仅仅是真正的源代码,输出一个 hello world 都有好几百行代码;
  • GCC确实很强大,如果是用VC这种IDE,恐怕就不能看到预处理后的结果。

编译器(ccl)

将文本文件 .i 翻译成文本文件 .s ,得到汇编语言程序(把高级语言翻译为机器语言),该种语言程序中的每条语句都以一种标准的文本格式确切的描述了一条低级机器语言指令。

  • gcc -S 选项可以得到编译后的汇编代码,扩展名为 .s
  • 汇编语言为不同高级语言的不同编译器提供了通用的输出语言,比如,C编译器和Fortran编译器产生的输出文件用的都是一样的汇编语言。

汇编(as)

.s 翻译成机器语言指令,把这些指令打包成一种叫做可重定位目标程序的格式,并将结果保存在目标文件 .o 中(把汇编语言翻译成机器语言的过程)。

  • gcc -c 选项可以得到汇编后的结果,扩展名为 .o
  • .o 是一个二进制文件,它的字节编码是机器语言指令而不是字符。如果在文本编辑器中打开 .o 文件,看到的将是一堆乱码;
  • 把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析、语法分析、语义检查和中间代码生成、代码优化和目标代码生成。主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息。

链接(ld)

gcc会到系统默认的搜索路径 /usr/lib 下进行查找,也就是链接到 libc.so.6 库函数中去。 函数库一般分为静态库和动态库两种。

  • 静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为 .a
  • 动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为 .so ,如前面所述的libc.so.6就是动态库。gcc在编译时默认使用动态库。

以上所述就是小编给大家介绍的《预处理器、编译器、汇编、链接》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

网络共和国

网络共和国

[美] 凯斯·桑斯坦 / 黄维明 / 上海人民出版社 / 2003-6-1 / 15.00元

本书主要讨论网络中的民主问题。网络技术已经深刻地影响了我们的生活,我们随时可以获得我们需要的信息,我们也随时可以与别人联系,那么网络技术是不是就是民主的福音呢?作者回答说不,他认为通过网络人们更容易获得的是自己喜欢的信息,而拒绝接受自己不喜欢的信息,事实上人们得到的是窄化的信息,很多的网站也不和与自己立场相反的网站链接。而在一个真正的民主的环境中,信息应是多元的并且不是我们事先选择的,在其中我们还......一起来看看 《网络共和国》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

SHA 加密
SHA 加密

SHA 加密工具