1 / 47
文档名称:

第7章 预处理命令.ppt

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

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

分享

预览

第7章 预处理命令.ppt

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

下载得到文件列表

第7章 预处理命令.ppt

文档介绍

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

无参宏的宏名后不带参数。其定义的一般形式为:
#define 标识符字符串
其中的“#”表示这是一条预处理命令。凡是以“#”开头的均为预处理命令。“define”为宏定义命令。“标识符”为所定义的宏名。“字符串”可以是常数、表达式、格式串等。在前面介绍过的符号常量的定义就是一种无参宏定义。此外,常对程序中反复使用的表达式进行宏定义。
: # define M (y*y+3*y)
定义M表达式(y*y+3*y)。
在编写源程序时,所有的(y*y+3*y)都可由M代替,而对源程序作编译时,将先由预处理程序进行宏代换,即用(y*y+3*y)表达式去置换所有的宏名M,然后再进行编译。
#define M (y*y+3*y)
main()
{
int s,y;
printf("input a number: ");
scanf("%d",&y);
s=3*M+4*M+5*M; printf("s=%d\n",s); } 上例程序中首先进行宏定义,定义M表达式(y*y+3*y),在s= 3*M+4*M+5* M中作了宏调用。在预处理时经宏展开后该语句变为:s=3*(y*y+3*y)+4(y*y+3*y)+5(y*y+3*y);但要注意的是,在宏定义中表达式(y*y+3*y)两边的括号不能少。否则会发生错误。
当作以下定义后:#difine M y*y+3*y在宏展开时将得到下述语句: s=3*y*y+3*y+4*y*y+3*y+5*y*y+3*y;这相当于 3y2+3y+4y2+3y+5y2+3y;显然与原题意要求不符。计算结果当然是错误的。因此在作宏定义时必须十分注意。应保证在宏代换之后不发生错误。
对于宏定义还要说明以下几点:
1. 宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种简单的代换,字符串中可以含任何字符,可以是常数,也可以是表达式,预处理程序对它不作任何检查。如有错误,只能在编译已被宏展开后的源程序时发现。
#undef的作用是表示PI只在main函数中有效,在f1中无效,这样可以灵活控制宏定义的作用范围。
4. 宏名在源程序中若用引号括起来,则预处理程序不对其作宏代换。
:
#define OK 100
main()
{
printf("OK");
printf("\n");
}
上例中定义宏名OK表示100,但在printf语句中OK被引号括起来,因此不作宏代换。程序的运行结果为:OK这表示把“OK”当字符串处理。
5. 宏定义允许嵌套,在宏定义的字符串中可以使用已经定义的宏名。在宏展开时由预处理程序层层代换。
:
#define PI
#define S PI*y*y /* PI是已定义的宏名*/
对语句:printf("%f",s);在宏代换后变为: printf("%f",*y*y);

最近更新

2024年黑龙江幼儿师范高等专科学校单招职业技.. 39页

2024年黑龙江省七台河市单招职业倾向性考试题.. 39页

2024年黑龙江省齐齐哈尔市单招职业倾向性测试.. 38页

2024年黔南民族职业技术学院单招综合素质考试.. 40页

2025年三亚城市职业学院单招职业适应性测试模.. 39页

2025年上海健康医学院单招职业技能测试模拟测.. 39页

2025年上海应用技术大学单招综合素质考试模拟.. 39页

2025年上海电力大学单招职业适应性测试题库最.. 40页

2025年东营科技职业学院单招职业技能测试模拟.. 41页

2025年云南工程职业学院单招职业适应性测试模.. 39页

2025年云南能源职业技术学院单招综合素质考试.. 39页

2025年伊犁职业技术学院单招职业适应性考试模.. 41页

2025年信阳航空职业学院单招职业倾向性测试模.. 38页

2025年兰州石化职业技术大学单招职业技能测试.. 41页

2025年冀中职业学院单招职业适应性考试模拟测.. 40页

2025年内蒙古呼伦贝尔市单招职业倾向性考试模.. 41页

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

2025年南京旅游职业学院单招职业适应性测试题.. 41页

2025年南充职业技术学院单招职业技能考试模拟.. 41页

2025年厦门兴才职业技术学院单招职业技能考试.. 41页

2025年合肥财经职业学院单招职业倾向性测试题.. 40页

2025年吉林水利电力职业学院单招职业技能考试.. 41页

2025年吉林铁道职业技术学院单招职业倾向性测.. 40页

2025年咸阳职业技术学院单招职业适应性考试模.. 39页

2025年哈尔滨铁道职业技术学院单招职业倾向性.. 41页

2025年喀什职业技术学院单招职业适应性考试模.. 39页

2025年四川卫生康复职业学院单招职业倾向性考.. 42页

2025年四川建筑职业技术学院单招职业倾向性测.. 42页

2025年四川现代职业学院单招职业适应性测试模.. 41页

2025年四川铁道职业学院单招职业适应性考试模.. 41页