1 / 28
文档名称:

第10章 编译预处理.ppt

格式:ppt   页数:28
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

第10章 编译预处理.ppt

上传人:中国课件站 2011/9/6 文件大小:0 KB

下载得到文件列表

第10章 编译预处理.ppt

文档介绍

文档介绍:第10章编译预处理
学习目标:
掌握宏定义的运用
掌握文件包含的用法
学会使用条件编译编译程序
概述
C语言提供了编译预处理功能,这是它与其它高级语言的一个重要区别。在前面各章中,已多次使用过以“#”号开头的预处理命令。如包含命令# include,宏定义命令# define等。在源程序中这些命令都放在函数之外, 而且一般都放在源文件的前面,它们称为预处理命令。
所谓预处理是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的工作。预处理是C语言的一个重要功能, 它由预处理程序负责完成。当对一个源文件进行编译时, 系统将自动引用预处理程序对源程序中的预处理部分作处理,处理完毕自动进入对源程序的编译。
C语言提供的编译预处理功能,主要有宏定义、文件包含、条件编译三种,分别用宏定义命令、文件包含命令、条件编译命令来实现。合理地使用预处理功能编写的程序便于阅读、修改、移植和调试,有利于提高代码的效率,也有利于模块化程序设计。本章介绍常用的几种预处理功能。
宏定义
在C语言源程序中允许用一个标识符来表示一个字符串, 称为“宏”。被定义为“宏”的标识符称为“宏名”。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。
宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。在C语言中,“宏”分为有参数和无参数两种。下面分别讨论这两种“宏”的定义和调用。
不带参数的宏定义
用一个指定的标识符(即名字)来代表一个字符串,其定义的一般形式为:
#define 标识符字符串
其中的“#”表示这是一条预处理命令。凡是以“#”开头的均为预处理命令。“define”为宏定义命令。“标识符”为所定义的宏名。“字符串”可以是常数、表达式、格式串等。

在前面介绍过的符号常量的定义就是一种不带参数的宏定义。此外,常对程序中反复使用的表达式进行宏定义。
例如:
# define M (y*y+2*y)
它的作用是定义M表达式(y*y+2*y)。在编写源程序时,所有的(y*y+2*y)都可由M代替,而对源程序作编译时,将先由预处理程序进行宏代换,即用(y*y+2*y)表达式去置换所有的宏名M,然后再进行编译。
[] 宏替换的应用
#define M (y*y+2*y) /*宏定义*/
#include""
main()
{
int s,y;
printf("input a number: "); /*输入提示*/
scanf("%d",&y); /*输入一个整型数*/
s=2*M+3*M+4*M; /*先进行宏替换,然后计算表达式*/
printf("s=%d\n",s); /*输出结果*/
}
上例程序中首先进行宏定义,定义M表达式(y*y+2*y),在s=2*M+3*M+4*M中作了宏调用。在预处理时经宏展开后该语句变为:
s=2*(y*y+2*y)+3(y*y+2*y)+4(y*y+2*y);但要注意的是,在宏定义中表达式(y*y+2*y)两边的括号不能少。否则会发生错误。假如,在宏定义中不带括号,则变成如下的语句
#difine M y*y+2*y
在宏展开时将得到下述语句: s=2*y*y+2*y+3*y*y+2*y+4*y*y+2*y;
这表达式相当于:
s=9y2+6y;
显然与原题意要求不符。计算结果当然是错误的。此时如果输入一个整型数2,那么输出结果是48,而不是72。因此在作宏定义时必须十分注意。应保证在宏代换之后不发生错误。
对于那些在程序中需要经常引用的常量如重力加速度g=,经常会应用宏定义。对于那些多处使用的常量,使用宏定义,当改变这个常量的值的时候,只要在宏定义语句中进行一次修改就可以了,而没有必要在程序中所有用到此常量的地方进行逐个修改,这样可以避免修改上遗漏,减少不必要的错误。

请读者注意的是,如果宏名在程序中被引号括起来,则不进行宏替换,下面就是这样一个例子。
[] 如果宏名在程序中被引号括起来,则不进行宏替换。
#define ABC 12345
#include""
main()
{
printf("ABC");
printf("\n");
}
上例中定义宏名ABC表示12345,但在printf语句中ABC被引号括号起来,因此不作宏替换。而是当作一个标准的字符串输出,因此,程序的运行结果为:ABC。
从上面两个例子,我们可以注意到:宏名都是用大写字母来表示的,一般来说,宏名用大写字母表示,以便于与变量区别,但这并不意味着宏名不能用小写字母,只是为了与变量区别而已。

最近更新

2024年广西城市职业大学单招职业倾向性考试模.. 39页

2024年广西工程职业学院单招职业技能考试模拟.. 40页

2024年广西机电职业技术学院单招职业技能测试.. 41页

2024年广西物流职业技术学院单招职业倾向性测.. 40页

2024年广西理工职业技术学院单招职业适应性考.. 40页

2024年广西省北海市单招职业适应性考试题库附.. 38页

2024年广西省桂林市单招职业适应性测试模拟测.. 39页

2024年广西科技职业学院单招职业技能测试模拟.. 40页

2024年广西英华国际职业学院单招职业适应性考.. 39页

2024年广西金融职业技术学院单招职业技能考试.. 39页

2024年徐州幼儿师范高等专科学校单招职业倾向.. 42页

2024年德宏职业学院单招职业适应性测试模拟测.. 40页

2024年德阳农业科技职业学院单招职业技能考试.. 40页

2024年惠州卫生职业技术学院单招职业技能测试.. 40页

2024年成都农业科技职业学院单招职业倾向性考.. 40页

2024年成都纺织高等专科学校单招职业适应性考.. 40页

2024年成都艺术职业大学单招职业适应性考试模.. 39页

2024年扬州中瑞酒店职业学院单招职业技能测试.. 41页

2024年承德应用技术职业学院单招职业倾向性考.. 41页

2024年新疆吐鲁番地区单招职业适应性考试模拟.. 41页

2024年新疆天山职业技术大学单招职业倾向性考.. 39页

2025年国家开放大学《建筑力学》章节测试参考.. 13页

【人教版英语字帖】七年级下册单词表衡水体字.. 42页

食品安全自查、从业人员健康管理、进货查验记.. 9页

康复医院设置标准1 14页

介绍医院门诊ppt 28页

农村人才流失国外研究报告 2页

空调系统维保记录表格模板 7页

黄酒评分、扣分标准表(共1页) 1页

曾仕强易经六十四卦解 68页