1 / 16
文档名称:

第08章 编译预处理.ppt

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

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

分享

预览

第08章 编译预处理.ppt

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

下载得到文件列表

第08章 编译预处理.ppt

文档介绍

文档介绍:第8章编译预处理
所谓编译预处理是指,在对源程序进行编译之前,先对源程序中的编译预处理命令进行处理;然后再将处理的结果,和源程序一起进行编译,以得到目标代码。
宏定义与符号常量
文件包含
条件编译
[Return]
宏定义与符号常量
在C语言中,“宏”分为无参数的宏(简称无参宏)和有参数的宏(简称有参宏)两种。
无参宏定义
符号常量
有参宏定义
[Return]
无参宏定义

#define 标识符语言符号字符串
其中:“define”为宏定义命令;“标识符”为所定义的宏名,通常用大写字母表示,以便于与变量区别;“语言符号字符串”可以是常数、表达式、格式串等。

(1)可提高源程序的可维护性
(2)可提高源程序的可移植性
(3)减少源程序中重复书写字符串的工作量
[] 输入圆的半径,求圆的周长、面积和球的体积。要求使用无参宏定义圆周率。
/*案例代码文件名:*/
/*程序功能:输入圆的半径,求圆的周长、面积和球的体积。*/
#define PI /*PI是宏名,*/
main()
{ float radius,length,area,volume;
printf("Input a radius: ");
scanf("%f",&radius);
length=2*PI*radius; /*引用无参宏求周长*/
area=PI*radius*radius; /*引用无参宏求面积*/
volume=PI*radius*radius*radius*3/4; /*引用无参宏求体积*/
printf("length=%.2f,area=%.2f,volume=%.2f\n", length, area, volume);
}
[程序演示]

(1)宏名一般用大写字母表示,以示与变量区别。但这并非是规定。
(2)宏定义不是C语句,所以不能在行尾加分号。否则,宏展开时,会将分号作为字符串的1个字符,用于替换宏名。
(3)在宏展开时,预处理程序仅以按宏定义简单替换宏名,而不作任何检查。如果有错误,只能由编译程序在编译宏展开后的源程序时发现。
(4)宏定义命令#define出现在函数的外部,宏名的有效范围是:从定义命令之后, 到本文件结束。通常,宏定义命令放在文件开头处。
(5)在进行宏定义时,可以引用已定义的宏名。
(6)对双引号括起来的字符串内的字符,即使与宏名同名,也不进行宏展开。
[Return]
符号常量
在定义无参宏时,如果“语言符号字符串”是一个常量,则相应的“宏名”就是一个符号常量。
恰当命名的符号常量,除具有宏定义的上述优点外,还能表达出它所代表常量的实际含义,从而增强程序的可读性。
#define EOF -1 /*文件尾*/
#define NULL 0 /*空指针*/
#define MIN 1 /*极小值*/
#define MAX 31 /*极大值*/
#define STEP 2 /*步长*/
[Return]
有参宏定义

#define 宏名(形参表) 语言符号字符串

(1)调用格式:宏名(实参表)
(2)宏展开:用宏调用提供的实参字符串,直接置换宏定义命令行中、相应形参字符串,非形参字符保持不变。

(1)定义有参宏时,宏名与左圆括号之间不能留有空格。否则,C编译系统将空格以后的所有字符均作为替代字符串,而将该宏视为无参宏。
(2)有参宏的展开,只是将实参作为字符串,简单地置换形参字符串,而不做任何语法检查。在定义有参宏时,在所有形参外和整个字符串外,均加一对圆括号。
(3)虽然有参宏与有参函数确实有相似之处,但不同之处更多,主要有以下几个方面:
1)调用有参函数时,是先求出实参的值,然后再复制一份给形参。而展开有参宏时,只是将实参简单地置换形参。
2)在有参函数中,形参是有类型的,所以要求实参的类型与其一致;而在有参宏中,形参是没有类型信息的,因此用于置换的实参,什么类型都可以。有时,可利用有参宏的这一特性,实现通用函数功能。
3)使用有参函数,无论调用多少次,都不会使目标程序变长,但每次调用都要占用系统时间进行调用现场保护和现场恢复;而使用有参宏,由于宏展开是在编译时进行的,所以不占运行时间,但是每引用1次,都会使目标程序增大1次。
[Return]
文件包含

文件包含是指,一个源文件可以将另一个源文件的全部内容包含进来

最近更新

2025年义乌工商职业技术学院单招职业技能测试.. 40页

2025年九江理工职业学院单招职业倾向性测试题.. 40页

2025年云南三鑫职业技术学院单招职业倾向性测.. 39页

2025年云南体育运动职业技术学院单招职业倾向.. 41页

2025年云南工贸职业技术学院单招职业适应性考.. 41页

2025年云南旅游职业学院单招职业技能测试模拟.. 38页

2025年云南水利水电职业学院单招职业技能考试.. 41页

2025年云南理工职业学院单招职业倾向性测试题.. 40页

2025年云南省德宏傣族景颇族自治州单招职业适.. 40页

2025年云南省楚雄彝族自治州单招职业倾向性考.. 42页

2025年仙桃职业学院单招综合素质考试题库推荐.. 39页

2025年信阳涉外职业技术学院单招综合素质考试.. 41页

2025年信阳艺术职业学院单招综合素质考试模拟.. 39页

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

2025年六盘水职业技术学院单招职业技能测试模.. 39页

2025年兰州石化职业技术大学单招职业倾向性考.. 39页

2025年兴安职业技术学院单招职业适应性考试模.. 42页

2025年内蒙古交通职业技术学院单招职业适应性.. 40页

2025年内蒙古化工职业学院单招职业倾向性测试.. 41页

2025年内蒙古商贸职业学院单招职业倾向性测试.. 41页

2025年内蒙古机电职业技术学院单招职业技能考.. 40页

2025年内蒙古科技职业学院单招职业倾向性考试.. 39页

2025年内蒙古赤峰市单招职业适应性考试模拟测.. 40页

2025年包头轻工职业技术学院单招职业倾向性考.. 40页

2025年北京社会管理职业学院单招职业适应性测.. 41页

2025年北海职业学院单招职业技能测试模拟测试.. 41页

2025年南京交通职业技术学院单招职业倾向性测.. 40页

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

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

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