文章目录

  • 2.1 预处理的概念与作用
  • 2.1.1 预处理的概念
  • 2.1.2 预处理的作用
  • 2.2 在Ubuntu下预处理的命令
  • 2.3 Hello的预处理结果解析
  • 2.4 本章小结


2.1 预处理的概念与作用

2.1.1 预处理的概念

预处理指的是程序在编译之前进行的处理,是计算机在处理一个程序时所进行的第一步处理,可以进行代码文本的替换工作,但是不做语法检查。预处理是为编译做的准备工作,能够对源程序预处理 GPU_文件包含文件中出现的以字符“#”开头的命令进行处理,包括宏定义#预处理 GPU_预处理 GPU_02、文件包含#预处理 GPU_预处理_03、条件编译#预处理 GPU_预处理_04等,最后将修改之后的文本进行保存,生成预处理 GPU_文件包含_05文件,预处理结束。而在预处理 GPU_文件包含_06中会进行的处理如图所示:

预处理 GPU_文件包含_07

2.1.2 预处理的作用

在预处理的过程中,计算机利用预处理器(预处理 GPU_文件包含_08)进行处理。而预处理主要有预处理 GPU_预处理_09个方面的内容,分别是根据字符“#”后所跟的具体语句进行不同处理。它们分别为宏定义、文件包含、条件编译。
宏定义在预处理的过程中会进行宏替换。在具体语句中表现为#预处理 GPU_预处理 GPU_02。宏定义具体而言又分为两种,在不带参数的宏定义中,要用实际值替换用#预处理 GPU_预处理 GPU_02定义的字符或字符串;而在带参数的宏定义中,不仅仅要进行实际值的替换,还要将参数进行代换。在宏替换中,仅仅只是做替换,不做计算和表达式求值。
文件包含指的是对代码中出现的#预处理 GPU_预处理_03语句进行处理。#预处理 GPU_预处理_03指令能够告诉预处理器读取源程序中所引用的系统的源文件,并且将这一段代码直接插入到程序文件中,最终保存为预处理 GPU_文件包含_05文件中。而在预处理 GPU_文件包含_06实例中,预处理会对#预处理 GPU_预处理_03<预处理 GPU_宏定义_17>、#预处理 GPU_预处理_03<预处理 GPU_预处理_19>、#预处理 GPU_预处理_03<预处理 GPU_预处理 GPU_21>三条语句进行文件包含的处理。
条件编译指的是针对#预处理 GPU_预处理_04、#预处理 GPU_windows_23等语句进行的处理。条件编译能够根据#预处理 GPU_预处理 GPU_24的不同条件决定需要进行编译的代码,#预处理 GPU_文件包含_25是结束这些语句的标志。使用条件编译可以使目标程序变小,在满足条件之后才会进行编译。

2.2 在Ubuntu下预处理的命令

下面在预处理 GPU_宏定义_26下对预处理 GPU_文件包含_06进行预处理,过程如下:

具体指令为预处理 GPU_预处理 GPU_28> 预处理 GPU_文件包含_08 预处理 GPU_文件包含_30 > 预处理 GPU_宏定义_31

具体指令的截图如下:

预处理 GPU_windows_32


预处理 GPU_宏定义_33


由图可知,在预处理器对程序进行预处理的过程中,对原来的预处理 GPU_宏定义_34代码进行了很大的修改以及补充,两个文本的大小相差极大,在main函数前被插入了大量的代码,这些都是进行预处理的结果。

2.3 Hello的预处理结果解析

在利用预处理 GPU_宏定义_26下的指令对预处理 GPU_文件包含_30进行预处理之后,生成的预处理文件保存在预处理 GPU_宏定义_31文件中,在预处理 GPU_宏定义_26下对其进行打开,使用预处理 GPU_宏定义_39工具,打开如下:

预处理 GPU_文件包含_40

在打开的文本中,我们很容易看到预处理 GPU_宏定义_31中添加了很多代码,而原来的预处理 GPU_宏定义_34代码在文本的最末端,如图:

预处理 GPU_预处理 GPU_43

由于预处理只是对源代码中的以字符“#”开头的语句进行处理,因此在预处理阶段程序中定义的其他操作并不会在预处理阶段进行处理。由于在程序中有关于头文件的文件包含,因此在预处理时对这一段进行了解析。在预处理 GPU_文件包含_44函数之前,预处理器就分别读取预处理 GPU_宏定义_17预处理 GPU_预处理_19预处理 GPU_预处理 GPU_21中的内容,并且根据读入的顺序依次进行内容的展开。如果头文件中仍然有以字符“#”开头的内容,则预处理器继续对其进行处理,最终的预处理 GPU_宏定义_31文件中没有宏定义、文件包含及条件解析等内容。而在预处理 GPU_宏定义_31文件中我们还能看到在源程序中定义的命令行参数、环境变量的内容,以及在文件包含中对头文件的处理,使用存储的绝对路径进行显示。另外,还有在头文件中使用的一些数据类型的说明、结构体定义、对引用的外部函数的声明,再包括未进行大修改的源代码,一起构成了预处理 GPU_宏定义_31头文件。上述信息如图所示:

预处理 GPU_预处理 GPU_51

2.4 本章小结

在本章中,通过对预处理的概念与作用的了解,结合具体的预处理 GPU_宏定义_52程序,对与处理中所做的处理进行了进一步分析,对预处理的指令进行了运用。同时针对预处理的操作结合预处理 GPU_文件包含_30进行了具体的阐述,对预处理 GPU_宏定义_52的预处理结果预处理 GPU_宏定义_31进行了结果解析。