C语言程序设计 教学课件 作者 黄锐军 第8章 编译预处理.ppt

C语言程序设计 教学课件 作者 黄锐军 第8章 编译预处理.ppt

ID:50043708

大小:63.50 KB

页数:15页

时间:2020-03-08

C语言程序设计 教学课件 作者 黄锐军 第8章 编译预处理.ppt_第1页
C语言程序设计 教学课件 作者 黄锐军 第8章 编译预处理.ppt_第2页
C语言程序设计 教学课件 作者 黄锐军 第8章 编译预处理.ppt_第3页
C语言程序设计 教学课件 作者 黄锐军 第8章 编译预处理.ppt_第4页
C语言程序设计 教学课件 作者 黄锐军 第8章 编译预处理.ppt_第5页
资源描述:

《C语言程序设计 教学课件 作者 黄锐军 第8章 编译预处理.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第8章编译预处理C语言提供了多种预处理功能,如宏定义、文件包含、条件编译等。合理地使用预处理功能编写的程序便于阅读、修改、移植和调试,也有利于模块化程序设计。本章介绍常用的几种预处理功能。8.1宏定义8.2文件包含8.3条件编译8.1宏定义8.1.1不带参数的宏定义宏定义的规则是:#define符号常数名称表达式其中#define是C语言的关键字,表示定义一个宏,符号常数名称与变量的规则一样,为了与常用的变量区分,常常把符号变量定义成大写符号,称为宏。而表达式是一个由常数、已经定义过的宏等组成的运算式。该语句的作用是在程序中一切的符号常数名出现的地方都将用对应的表达式来代替。

2、关于宏定义一般规则有:(1)#define语句一般写在程序的开头部分,而符号常数往往设计成大写(当然也可以是小写),因为一般的程序变量是小写或大小写混合的字符串,把宏定义符号常数设计成大写是一种习惯,主要是为了很明显地与程序变量相区分。(2)在宏定义的表达式中可以包含常数和已经在前面定义过的宏,使用宏来替代表达式可以减少在程序中反复书写同一个表达式的工作。(3)编译器在编译之前会把程序中出现的一切宏用其对应的表达式字符串来替代,而不是计算表达式的值后才替代。宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种简单的代换,字符串中可以含任何字符,可以是常数

3、,也可以是表达式,预处理程序对它不作任何检查。如有错误,只能在编译已被宏展开后的源程序时发现。(4)在#define语句中,宏与表达式用空格间隔开,在表达式末尾不存在分号,不然分号也会被认为是表达式的一部分而出现在程序中宏出现的位置。8.1.2带参数的宏定义C语言允许宏带有参数。在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数。对带参数的宏,在调用中不仅要宏展开,而且要用实参去代换形参。带参宏定义的一般形式为:#define宏名(形参表)字符串在字符串中含有各个形参。带参宏调用的一般形式为:宏名(实参表);关于带参数的宏定义有以下问题需要说明:(1)带参数宏定义中,

4、宏名和形参表之间不能有空格出现。(2)在带参宏定义中,形式参数不分配内存单元,因此不必作类型定义。而宏调用中的实参有具体的值。要用它们去代换形参,因此必须作类型说明。这是与函数中的情况不同的。在函数中,形参和实参是两个不同的量,各有自己的作用域,调用时要把实参值赋予形参,进行“值传递”。而在带参宏中,只是符号代换,不存在值传递的问题。(3)在宏定义中的形参是标识符,而宏调用中的实参可以是表达式。8.2文件包含8.2.1文件包含文件包含是C预处理程序的另一个重要功能,文件包含命令行的一般形式为:#include<文件名>在前面我们已多次用此命令包含过库函数的头文件,例如:#in

5、clude#include文件包含命令的功能是把指定的文件插入该命令行位置取代该命令行,从而把指定的文件和当前的源程序文件连成一个源文件。对文件包含命令还要说明以下几点:(1)包含命令中的文件名可以用双引号括起来,也可以用尖括号括起来。例如以下写法都是允许的:#include"stdio.h"#include但是这两种形式是有区别的,使用尖括号表示在包含文件目录中去查找(包含目录是由用户在设置环境时设置的),而不在源文件目录去查找;使用双引号则表示首先在当前的源文件目录中查找,若未找到才到包含目录中去查找。用户编程时可根据自己

6、文件所在的目录来选择某一种命令形式;(2)一个include命令只能指定一个被包含文件,若有多个文件要包含,则需用多个include命令;(3)文件包含允许嵌套,即在一个被包含的文件中又可以包含另一个文件;8.3条件编译预处理程序提供了条件编译的功能。可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件,这对于程序的移植和调试是很有用的。1.条件编译格式一条件编译的第一种格式如下:#ifdef标识符程序段1#else程序段2#endif它的功能是,如果标识符已被#define命令定义过则对程序段1进行编译;否则对程序段2进行编译。如果没有程序段2(它为空),本格式

7、中的#else可以没有,即可以写为:#ifdef标识符程序段1#endif2.条件编译格式二条件编译的另外一种形式如下:#ifndef标识符程序段1#else程序段2#endif它的功能是,如果标识符没有被#define命令定义过则对程序段1进行编译;否则对程序段2进行编译。如果没有程序段2(它为空),本格式中的#else可以没有,即可以写为:#ifndef标识符程序段1#endif功能与格式一的十分相似。3.条件编译格式三条件编译的第三种格式是:#if常量表达式程序段1#else程序段2#endif或

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。