中国高校课件下载中心 》 教学资源 》 大学文库

C和C++程序设计_第7章 预处理命令

文档信息
资源类别:文库
文档格式:PPT
文档页数:47
文件大小:190KB
团购合买:点击进入团购
内容简介
7.0概述 7.1宏定义 7.2“文件包含”处理 7.3条件编译 7.4本章小结
刷新页面文档预览

第7章预处理命令 第7章预处理命令 7.0概述 7.1宏定义 7.2“文件包含”处理 7.3条件编译 7.4本章小结

第7章 预处理命令 第7章 预处理命令 7.0 概述 7.1 宏定义 7.2“文件包含”处理 7.3 条件编译 7.4 本章小结

第7章预处理命令 7.0概述 在前面各章中,已多次使用过以“#号开头的预处理命 令。如包含命令# include,宏定义命令# define等。在源程序 中这些命令都放在函数之外,而且一般都放在源文件的前面, 它们称为预处理部分。 所谓预处理是指在进行编译的第一遍扫描(词法扫描和语 法分析)之前所作的工作。预处理是C语言的一个重要功能, 它由预处理程序负责完成。当对一个源文件进行编译时,系 统将自动引用预处理程序对源程序中的预处理部分作处理, 处理完毕自动进入对源程序的编译 Back

第7章 预处理命令 7.0 概述 在前面各章中,已多次使用过以“#”号开头的预处理命 令。如包含命令# include,宏定义命令# define等。在源程序 中这些命令都放在函数之外, 而且一般都放在源文件的前面, 它们称为预处理部分。 所谓预处理是指在进行编译的第一遍扫描(词法扫描和语 法分析)之前所作的工作。预处理是C语言的一个重要功能, 它由预处理程序负责完成。当对一个源文件进行编译时,系 统将自动引用预处理程序对源程序中的预处理部分作处理, 处理完毕自动进入对源程序的编译

第7章预处理命令 C语言提供了多种预处理功能,如宏定义、文件包含、条 件编译等。合理地使用预处理功能编写的程序便于阅读、修改、 移植和调试,也有利于模块化程序设计。本章介绍常用的几种 预处理功能。C语言与其他高级语言的一个重要区别是可以使 用预处理命令和具备预处理的功能 C提供的预处理功能主要有以下三种: 宏定义 文件包含 条件编译 分别是用宏定义命令、文件包含命令、条件编译命令来实 现。为了与一般C语句想区别,这些命令以“#开头 <Back

第7章 预处理命令 C语言提供了多种预处理功能,如宏定义、文件包含、条 件编译等。合理地使用预处理功能编写的程序便于阅读、修改、 移植和调试,也有利于模块化程序设计。本章介绍常用的几种 预处理功能。C语言与其他高级语言的一个重要区别是可以使 用预处理命令和具备预处理的功能。 C提供的预处理功能主要有以下三种: 宏定义 文件包含 条件编译 分别是用宏定义命令、文件包含命令、条件编译命令来实 现。为了与一般C语句想区别,这些命令以“#”开头

第7章预处理命令 7.1宏定义 在C语言源程序中允许用一个标识符(即名字)来表示一个字 符串,称为“宏”。 被定义为“宏”的标识符称为“宏名”。在编译预处理时,对 程序中所有出现的“宏名”,都用宏定乂中的字符串去代换,这称 为“宏代换”或“宏展开”。 宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理 程序自动完成的。在C语言中,“宏”分为有参数和无参数两种 下面分别讨论这两种“宏”的定义和调用 Back

第7章 预处理命令 7.1 宏定义 在C语言源程序中允许用一个标识符(即名字)来表示一个字 符串, 称为“宏”。 被定义为“宏”的标识符称为“宏名”。在编译预处理时,对 程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称 为“宏代换”或“宏展开”。 宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理 程序自动完成的。在C语言中,“宏”分为有参数和无参数两种。 下面分别讨论这两种“宏”的定义和调用

第7章预处理命令 7.1.1无参宏定义 无参宏的宏名后不带参数。其定义的一般形式为 # define标识符字符串 其中的“#表示这是一条预处理命令。凡是以“#开头的均为 预处理命令。“ define”为宏定义命令。“标识符”为所定义的宏 名。“字符串”可以是常数、表达式、格式串等。在前面介绍过 的符号常量的定义就是一种无参宏定义。此外,常对程序中反复 使用的表达式进行宏定义。 F7.1:#define M (y*y+3*y) 定义M表达式(y*y+3*y)。 司ac

第7章 预处理命令 7.1.1无参宏定义 无参宏的宏名后不带参数。其定义的一般形式为: #define 标识符 字符串 其中的“#”表示这是一条预处理命令。凡是以“#”开头的均为 预处理命令。“define”为宏定义命令。“标识符”为所定义的宏 名。“字符串”可以是常数、表达式、格式串等。在前面介绍过 的符号常量的定义就是一种无参宏定义。此外,常对程序中反复 使用的表达式进行宏定义。 例7.1:# define M (y*y+3*y) 定义M表达式(y*y+3*y)

第7章预处理命令 在编写源程序时,所有的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(" %od", &y); ack

第7章 预处理命令 在编写源程序时,所有的(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);

第7章预处理命令 S=3*M+4*M+5M; printf("s=%d n"s) 上例程序中首先进行宏定义,定义M表达式(y*y+3*y),在 S=3米M+4*M+5*M中作了宏调用。在预处理时经宏展开 后该语句变为:s3*(y*y+3*y)+4(y*y+3*y)+5(y*y+3*y); 但要注意的是,在宏定义中表达式(y*y+3*y)两边的括号 不能少。否则会发生错误 4B丑ck

第7章 预处理命令 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)两边的括号 不能少。否则会发生错误

0%第7章预处理命令 当作以下定义后:# difined*y+3*y在宏展开时将得到下述语句: s=3*y*y+3*y+4*y*y+3*y+5*y*y+3*y;这相当于3y2+3y+4y 2+3y+5y2+3y;显然与原题意要求不符。计算结果当然是错误的 因此在作宏定义时必须十分注意。应保证在宏代换之后不发生错误。 对于宏定义还要说明以下几点: 1.宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代 宏名,这只是一种简单的代换,字符串中可以含任何字符,可以是常 数,也可以是表达式,预处理程序对它不作任何检查。如有错误,只 能在编译已被宏展开后的源程序时发现

第7章 预处理命令 当作以下定义后:#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. 宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代 宏名,这只是一种简单的代换,字符串中可以含任何字符,可以是常 数,也可以是表达式,预处理程序对它不作任何检查。如有错误,只 能在编译已被宏展开后的源程序时发现。 10−38

0%第7章预处理命令 undef的作用是表示P只在main函数中有效,在f中无效,这样可 以灵活控制宏定义的作用范围。 4.宏名在源程序中若用引号括起来,则预处理程序不对其作宏代换。 例73: #define ok 100 main( printf("OK printf("n ) Back

第7章 预处理命令 #undef的作用是表示PI只在main函数中有效,在f1中无效,这样可 以灵活控制宏定义的作用范围。 4. 宏名在源程序中若用引号括起来,则预处理程序不对其作宏代换。 例7.3: #define OK 100 main() { printf("OK"); printf("\n"); } 10−38

第7章预处理命令 上例中定义宏名OK表示100,但在 printi语句中OK被引号括起来, 因此不作宏代换。程序的运行结果为:OK这表示把“OK”当字符串 处理 5宏定义允许嵌套,在宏定义的字符串中可以使用已经定义的宏名 在宏展开时由预处理程序层层代换 例74: #define pi 3. 1415926 define s pla*y*y/*PI是已定义的宏名* 对语句: printf("%f"s在宏代换后变为: printf"f",3.1415926*y*y) Back

第7章 预处理命令 上例中定义宏名OK表示100,但在printf语句中OK被引号括起来, 因此不作宏代换。程序的运行结果为:OK这表示把“OK”当字符串 处理。 5. 宏定义允许嵌套,在宏定义的字符串中可以使用已经定义的宏名。 在宏展开时由预处理程序层层代换。 例7.4: #define PI 3.1415926 #define S PI*y*y /* PI是已定义的宏名*/ 对语句:printf("%f",s);在宏代换后变为:printf("%f",3.1415926*y*y);

刷新页面下载完整文档
VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
相关文档