1 / 56
文档名称:

第9章 预处理命令.ppt

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

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

分享

预览

第9章 预处理命令.ppt

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

下载得到文件列表

第9章 预处理命令.ppt

文档介绍

文档介绍:宏定义
“文件包含”处理
条件编译
习题
第9章预处理命令
ANSI C标准规定可以在C源程序中加入一些“预处理命令”(preprocessor DireCtiveS) ,以改进程序设计环境,提高编程效率。这些预处理命令是由ANSI C统一规定的,但是它不是C语言本身的组成部分,不能直接对它们进行编译(因为编译程序不能识别它们)。必须在对程序进行通常的编译(包括词法和语法分析、代码生成、优化等)之前,先对程序中这些特殊的命令进行“预处理”, 即根据预处理命令对程序作相应的处理(例如,若程序中用#define命令定义了一个符号常量A,则在预处理时将程序中所有的A都置换为指定的字符串。若程序中用#inClude命令包含一个文件“”,
)。经过预处理后程序不再包括预处理命令了,最后再由编译程序对预处理后的源程序进行通常的编译处理,得到可供执行的目标代码。现在使用的许多C编译系统都包括了预处理、编译和连接等部分,在进行编译时一气呵成。因此不少用户误认为预处理命令是C语言的一部分,甚至以为它们是C语句,这是不对的。必须正确区别预处理命令和C语句、区别预处理和编译,才能正确使用预处理命令。C语言与其他高级语言的一个重要区别是可以使用预处理命令和具有预处理的功能。
C提供的预处理功能主要有以下三种:
1. 宏定义
2. 文件包含
3. 条件编译
分别用宏定义命令、文件包含命令、条件编译命令来实现。为了与一般C语句相区别,这些命令以符号“#”开头。
宏定义
不带参数的宏定义
用一个指定的标识符(即名字)来代表一个字符串,它的一般形式为#define 标识符字符串。这就是已经介绍过的定义符号常量。如:#“”这个字符串,在编译预处理时,将程序中在该命令以后出现的所有的PI都用“”代替。这种方法使用户能以一个简单的名字代替一个长的字符串,因此把这个标识符(名字)称为“宏名”,在预编译时将宏名替换成字符串的过程称为“宏展开”。#define是宏定义命令。

#define PI
main()
{float l,s,r,v;
printf("input raDiuS∶");
scanf("%f",&r);
l=*PI*r;
s=PI*r*r;
v=*PI*r*r*r; printf("l=%\nS=%\nv=%\n",l,s,v);
}
运行情况如下:
input radius:4
l=
s=
v=
说明:
(1) 宏名一般习惯用大写字母表示,以便与变量名相区别。但这并非规定,也可用小写字母。
(2) 使用宏名代替一个字符串,可以减少程序中重复书写某些字符串的工作量。例如,,,不仅麻烦,而且容易写错(或敲错),用宏名代替,
简单不易出错,因为记住一个宏名(它的名字往往用容易理解的单词表示)要比记住一个无规律的字符串容易,而且在读程序时能立即知道它的含义,当需要改变某一个常量时,可以只改变#define命令行,一改全改。例如,定义数组大小,可以用
#define array- size 1000
int array[array-size];
先指定array-size代表常量1000,因此数组array大小为1000,如果需要改变数组大小,只需改#define行:
#define array-size 500
使用宏定义,可以提高程序的通用性。
(3) 宏定义是用宏名代替一个字符串,也就是作简单的置换,不作正确性检查。如果写成
#define PI
即把数字1写成小写字母l,预处理时也照样代入,不管含义是否正确。也就是说预编译时不作任何语法检查。只有在编译已被宏展开后的源程序时才会发现错误并报错。
(4) 宏定义不是C语句,不必在行末加分号。如果加了分号则会连分号一起进行置换。如:
#define PI ;
area=PI*r*r;
经过宏展开后,该语句为
area=;*r*r;
显然出现语法错误。
(5) #define命令出现在程序中函数的外面,宏名的有效范围为定义命令之后到本源文件结束。通常,#define命令写在文件开头,函数之前,作为文件一部分,在此文件范围内有效。
(6) 可以用#undef命令终止宏定义的作用域。例如:

最近更新

休克病人的septicshock护理要点 38页

儿科护理中的创新与实践 30页

2023年三亚航空旅游职业学院单招职业适应性考.. 41页

2023年上海市单招职业适应性考试题库含答案 41页

2023年上海海事大学单招职业倾向性测试题库推.. 41页

2023年上海第二工业大学单招职业技能测试模拟.. 40页

2023年云南机电职业技术学院单招职业技能考试.. 38页

2023年云南经贸外事职业学院单招职业技能考试.. 40页

2023年仰恩大学单招职业适应性考试题库必考题.. 40页

2023年保险职业学院单招职业倾向性考试模拟测.. 42页

2023年克拉玛依职业技术学院单招职业技能测试.. 40页

2023年兰州石化职业技术学院单招职业适应性考.. 39页

2023年冀中职业学院单招职业倾向性考试题库附.. 40页

2023年内蒙古体育职业学院单招职业适应性测试.. 40页

2026年兔年春节对联 13页

2023年内蒙古通辽市单招职业适应性测试题库完.. 39页

2023年北京戏曲艺术职业学院单招职业倾向性考.. 39页

2023年南京交通职业技术学院单招职业倾向性考.. 39页

2023年南京视觉艺术职业学院单招职业倾向性测.. 38页

2023年厦门东海职业技术学院单招职业技能考试.. 41页

2023年厦门工学院单招职业适应性考试题库完美.. 40页

2023年吉安幼儿师范高等专科学校单招职业适应.. 40页

2023年吉林电子信息职业技术学院单招职业倾向.. 40页

2023年吉林省长春市单招职业适应性测试题库必.. 41页

小学数学六年级下册《鸽巢问题》作业设计 9页

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

国开《建筑力学》期末机考答案 15页

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

住院患者自带药品使用管理规定通知 3页

栏杆计算书 2页