预览加载中,请您耐心等待几秒...
1/2
2/2

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

1998年6月uterApplicationsJun.1998 C语言中的编译预处理技术及其灵活运用 魏灿秋四川联合大学蒲小琼成都纺织专科学校四川õ成都(610064) 摘要编译预处理是C语言一个重要且特别的功能,在进行C语言程序设计 时,灵活使用编译预处理技术可使源程序模块化结构好,更加清晰和便于阅读,并易 于调试和移植。 关键词编译预处理,包含文件,宏定义,条件编译 理程序只按编译系统所设的包含文件缺省路径寻找 1什么是编译预处理 文件名;若用“”括住一个含有路径的文件名,则预处 在C语言的编译系统中存在预处理程序模块,理程序首先搜索该路径所指目录,若未找到所指文 其功能是:在对一个源程序进行编译时,预处理程序件,则再到编译系统的缺省设定目录下搜索。许多C 首先对源程序进行扫描,对C语言中的几种预处理语言初学者不明白此点,常常在编译时发生找不到 语句进行分析和处理。经过预处理之后,才进行正式包含文件的错误。 编译以形成目标代码。因此,若想将自己所写的另一段源程序嵌入目 书写源程序时,一般将预处理语句置于开头部前被编译程序中,应注意被嵌入源程序位于哪个目 分,每一条预处理语句以“#”开始。C语言的初学者录之下。一般情况下,最好将所有源程序放在同一目 都会遇到必须使用的包含文件语句“#include”就属录下,在#include语句中用双号“”指明路径,在编 于预处理语句。预处理语句主要有包含文件、宏定译时就不会发生找不到包含文件的错误。 义、条件编译三类。另一个需要明确的概念是:任何一个C程序都 对包含文件,预处理程序要将被包含的文件之是由一个主函数main()和一些自定义函数及对库 源代码嵌于被编译程序的相应位置,参加正式的编函数的调用构成的,程序的执行从主函数开始。在程 译以目标代码生成;对宏定义,预处理程序要对相应序中若有对某一函数的调用,则需用#include语句 符号进行宏替换;对条件编译,预处理程序要根据条嵌入相应的头文件(如stdio.h)。但相应头文件中的 件确定源程序中的哪些部分要参加正式编译形成目代码是对相应函数的原型及符号常量等进行说明和 标代码,哪些部分不形成目标代码。以下就三类预处定义;而库函数的函数体代码则是以目标代码的形 理语句进行分别讨论。式存于库中的,在进行连接时方连入执行代码中。 2包含文件语句#include3宏定义 C语言的初学者一开始都会接触到#include宏定义有符号常量宏定义和带参数的宏定义两 语句,即使是最简单的C语言程序也需要将象种。符号常量宏定义的目的是给在C程序中出现的 stdio.h这样的文件包含入自己所设计的源程序之常量定义一个便于阅读理解的名字;带参数的宏定 中。但许多有关C语言程序设计的书中未明确说明义可用一个直观的名称实现一定的函数功能。二者 编译程序对它的处理方法。均可提高程序的可读性,使程序中相应的常量、参数 预处理程序对#include语句的处理方法是:将便于修改。 #include语句所指的文件(源程序)代码完全嵌于符号常量定义语句的一般格式是: 被编译程序中#include所在的位置,以参加正式编#define符号常量名常量值 译形成目标代码。符号常量名一般用大写字母表示。例如,在程序 包含文件语句的一般形式为中若多次使用“ESC”和“Ctrl+Z”键,由于它们的 #include〈文件名〉ASCII码为0X1A和0X1B,则可在程序开头使用语 或#include“文件名”句 我们在进行一个C语言编译系统的安装时,一#defineCTRL2Z0X1A 般要按安装步骤提示形成一个缺省包含文件搜索路#defineESC0X1B 径。如果#include语句中用〈〉括住文件名,则预处在源程序中即可使用常量名“Ctrl2Z”和“ESC” 3收稿日期:199721226魏灿秋硕士,讲师。研究方向:计算机应用。蒲小琼讲师。 第18卷第6期计算机应用Vol.18,No16 第6期魏灿秋等:C语言中的编译预处理技术及其灵活运用55 以便于阅读理解。编译时,预处理程序则将相应略。 ASCII码值替换到“Ctrl2Z”和“ESC”出现处,以便正例如,我们在源程序中有一段打印输出程序,要 式编译形成目标代码。适用于激光打印机或针式打印机。由于激光打印机 需要指出的是,预处理程序对符号常量的替换和针式打印机的分辨率及编程方法不一样,需用不 不作语法检查,只是原样替换。我们在进行宏定义语同的程序模块实现。 句书写时要小心避免错误,以免在正式编译时出现假设现在需要将激光打印机的程序模块进行编 语法错误。译,则源程序中有关打印部分可以书写如下 带参数的宏定义一般形式为#defineLASER1 #define宏名(参数表)表达式⋯⋯ 例如,在源程序中要使用到