C++学习笔记(一)

编译执行过程

C++编译过程主要分为,预处理、编译、汇编、链接四个过程。

一.预处理

概念:将源代码的.c 、.cpp 、.h 等文件包含到一个文件中。在这个过程中会使用一些预处理指令要求编译器使用什么样的方式包含这些文件。预处理结束之后对于c语言编译器会生成一个.i 文件。C++会生成.ii文件。

预编译过程主要处理那些源代码中以#开始的预编译指令,主要处理规则如下:

  • 将所有的#define删除,并且展开所有的宏定义;
  • 处理所有条件编译指令,如#if,#ifdef等;
  • 处理#include预编译指令,将被包含的文件插入到该预编译指令的位置。该过程递归进行,及被包含的文件可能还包含其他文件。
  • 删除所有的注释//和 /**/;
  • 添加行号和文件标识,如#2 “hello.c” 2,以便于编译时编译器产生调试用的行号信息及用于编译时产生编译错误或警告时能够显示行号信息;
  • 保留所有的#pragma编译器指令,因为编译器须要使用它们;

我的理解:预处理时将预处理文件库全部包含进来,以为例,中包含16000余条代码,预处理会将这些显示出来,然后生成一个.ii文件,在.ii的最下面才是我们自己的代码。

二.编译

概念:编译过程就是把预处理完的文件进行一系列词法分析,语法分析,语义分析及优化后生成相应的汇编代码文件。

理解:机器能识别的语言是汇编语言,这一步就是把刚才的预处理文件转变为汇编文件。

三.汇编

概念:
汇编器是将汇编代码转变成机器可以执行的命令,每一个汇编语句几乎都对应一条机器指令。汇编相对于编译过程比较简单,根据汇编指令和机器指令的对照表一一翻译即可。
理解:汇编语言是机器能理解的,但对于我们来说很复杂。

四.链接

概念:链接器ld将各个目标文件组装在一起,解决符号依赖,库依赖关系,并生成可执行文件。

理解:生成最终的.exe文件。

实践

生成预处理文件demo.ii。


用cl编译生成.s,但是失败了,正在寻找解决办法,以后补上吧。。。
用g++的命令是g++ -S demo.ii
g++ -o demo.o -c demo.s
g++ -o demo demo.o

posted @ 2020-01-29 17:26  hqk111  阅读(115)  评论(0编辑  收藏  举报