




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、4/30/2022精选ppt1编译预处理:编译预处理:在源程序文件中,加入在源程序文件中,加入“编译预处理命令编译预处理命令”,使编译程序在对,使编译程序在对源程序进行通常的编译(包括词法分析、语法分析、代码生成、代码优源程序进行通常的编译(包括词法分析、语法分析、代码生成、代码优化)之前,先对这些命令进行预处理,然后将预处理的结果和源程序一化)之前,先对这些命令进行预处理,然后将预处理的结果和源程序一起再进行通常的编译处理,以得到目标代码(起再进行通常的编译处理,以得到目标代码(OBJ文件)。文件)。C提供的编译预处理命令提供的编译预处理命令宏命令(宏命令(Macro)文件包含命令(文件包含
2、命令(include)条件编译命令条件编译命令这些命令均以这些命令均以#开头,以区别于语句。开头,以区别于语句。4/30/2022精选ppt2一、不带参数的宏一、不带参数的宏一般形式:一般形式: #define 标识符标识符 字符串字符串如:如: #define PI 3.1415926作用:用标识符(称为作用:用标识符(称为“宏名宏名”)PI代替字符串代替字符串“3.1415926”。在预编译时,将源程序中出现的宏名在预编译时,将源程序中出现的宏名PI替换为字符串替换为字符串“3.1415926”,这一替换过程称为这一替换过程称为“宏展开宏展开”。#define:宏定义命令:宏定义命令#un
3、def:终止宏定义命令:终止宏定义命令4/30/2022精选ppt3例例PI 3.1415926 main()float l,s,r,v; printf(input radius:);scanf(%f,&r); /* 输入圆的半径输入圆的半径 */l = 2.0*PI*r; /* 圆周长圆周长 */ s = PI*r*r; /* 圆面积圆面积 */v = 4.0/3.0*PI*r*r*r; /* 球体积球体积 */printf(l=%10.4fns=%10.4fnv=%10.4fn,l,s,v);4/30/2022精选ppt4关于宏定义的说明关于宏定义的说明:1、一般宏名用大写字母表示
4、。(变量名一般用小写字母)。、一般宏名用大写字母表示。(变量名一般用小写字母)。2、使用宏可以提高程序的可读性和可移植性。如上述程序中,多处、使用宏可以提高程序的可读性和可移植性。如上述程序中,多处需要使用需要使用值,用宏名既便于修改又意义明确。值,用宏名既便于修改又意义明确。3、宏定义是用宏名代替、宏定义是用宏名代替字符串字符串,宏扩展时仅作简单替换,不检查语,宏扩展时仅作简单替换,不检查语法。语法检查在编译时进行。法。语法检查在编译时进行。4、宏定义不是、宏定义不是C语句,后面不能有分号。如果加入分号,则连分号语句,后面不能有分号。如果加入分号,则连分号一起替换。一起替换。如:如:#def
5、ine PI 3.1415926;area = P*r*r;在宏扩展后成为:在宏扩展后成为:area = 3.1315926;*r*r;结果,在编译时出现语法错误。结果,在编译时出现语法错误。4/30/2022精选ppt55、通常把、通常把#define命令放在一个文件的开头,使其在本文件全部有命令放在一个文件的开头,使其在本文件全部有效。(效。(#define定义的宏仅在本文件有效,在其它文件中无效,定义的宏仅在本文件有效,在其它文件中无效,这与全局变量不同)。这与全局变量不同)。6、宏定义终止命令、宏定义终止命令 #undef结束先前定义的宏名。结束先前定义的宏名。#define G 9.
6、8main() #undef G /* 取消取消G的意义的意义 */f1() 4/30/2022精选ppt67、宏定义中可以引用已定义的宏名。、宏定义中可以引用已定义的宏名。例例8.2 #define R 3.0#define PI 3.1415926#deinfe L 2*PI*R #define S PI*R*Rmain()printf(L=%fnS=%fn,L,S); 8、对程序中用双引号括起来的字符串,即使与宏名相同,也不替换。、对程序中用双引号括起来的字符串,即使与宏名相同,也不替换。例如上例的例如上例的printf语句中,双引号括起来语句中,双引号括起来L和和S不被替换。不被替换。
7、4/30/2022精选ppt7二、带参数的宏二、带参数的宏一般形式:一般形式:#define 宏名(参数表)宏名(参数表) 字符串字符串带参数的宏在展开时,不是进行简单的字符串替换,而是进行参数带参数的宏在展开时,不是进行简单的字符串替换,而是进行参数替换。例、替换。例、4/30/2022精选ppt8例例#define PI 3.1415926#define S(r) PI*r*rmain() float a, area; a = 3.6; area = S(a); printf(r=%fnarea=%fn,a,area);说明:说明: 带参数的宏展开时,用实参字符串替换形参字符串,注意可能发
8、带参数的宏展开时,用实参字符串替换形参字符串,注意可能发生的错误。比较好的办法是宏定义的形参加括号。生的错误。比较好的办法是宏定义的形参加括号。4/30/2022精选ppt94/30/2022精选ppt10例例 返回多个值的宏定义。返回多个值的宏定义。#define PI 3.1415926#define CIRCLE(R,L,S,V) L=2*PI*R;S=PI*R*R;V=4/3*PI*R*R*R main() float r,l,s,v; /*半径、圆周长、圆面积、球体积半径、圆周长、圆面积、球体积 */scanf(%f,&r);CIRCLE(r,l,s,v); printf(r
9、=%6.2f,l=%6.2f,s=%6.2f,v=%6.2fn,r,l,s,v);输出结果输出结果:4/30/2022精选ppt11文件包含命令的一般格式是:文件包含命令的一般格式是:#include “文件名文件名”作用:预处理时,把作用:预处理时,把“文件名文件名”指定的文件内容复制到本文件,再对合并后指定的文件内容复制到本文件,再对合并后的文件进行编译。的文件进行编译。例、例、4/30/2022精选ppt12在文件中,有文件包含命令在文件中,有文件包含命令#include ,预处理时,先把的内容复,预处理时,先把的内容复制到文件,再对进行编译。制到文件,再对进行编译。从理论上说,从理论上
10、说,#include命令可以包含任何类型的文件,只要这些文命令可以包含任何类型的文件,只要这些文件的内容被扩展后符合件的内容被扩展后符合C语言语法。语言语法。一般一般#include命令用于包含扩展名为命令用于包含扩展名为.h的的“头文件头文件”,如,如stdio.h、string.h、math.h。在这些文件中,一般定义符号常量、宏,或。在这些文件中,一般定义符号常量、宏,或声明函数原型。声明函数原型。(2)文件)文件#include print_format.h“main() int a,b,c,d;char string = CHINA;a = 1; b = 2; c = 3; d =
11、4;PR(D1,a);PR(D2,a,b); PR(D3,a,b,c);PR(D4,a,b,c,d);PR(S,string);程序员也可以把自己定义的符号常程序员也可以把自己定义的符号常量、宏,或函数原型放在头文件中,量、宏,或函数原型放在头文件中,用用#include命令包含这些头文件。命令包含这些头文件。(1)文件)文件print_format.h#define PR printf#define NL n#define D %d #define D1 D NL#define D2 D D NL#define D3 D D D NL#define D4 D D D D NL#define
12、S %s4/30/2022精选ppt13说明:说明:1、一个、一个include命令只能指定一个被包含文件,如果要包含命令只能指定一个被包含文件,如果要包含n个文件,用个文件,用n个个Include命令。命令。2、#include命令的文件名,可以使用两种括号。命令的文件名,可以使用两种括号。#include 先在引用被包含文件的目录查找文件,若没有,再到系统指定的目录查先在引用被包含文件的目录查找文件,若没有,再到系统指定的目录查找。找。 #include 仅在系统指定的目录查找文件。仅在系统指定的目录查找文件。4/30/2022精选ppt14预处理程序提供了条件编译的功能。可以按不同的条件
13、去编译不同的程序部分,因而产生不同的目标代码文件。这对于程序的移植和调试是很有用的。条件编译有三种形式,下面分别介绍:4/30/2022精选ppt151. 第一种形式:#ifdef 标识符 程序段1#else 程序段2#endif它的功能是,如果标识符已被 #define命令定义过则对程序段1进行编译;否则对程序段2进行编译。如果没有程序段2(它为空),本格式中的#else可以没有,即可以写为:#ifdef 标识符程序段 #endif4/30/2022精选ppt162. 第二种形式: #ifndef 标识符 程序段1 #else 程序段2 #endif 与第一种形式的区别是将“ifdef”改为“ifndef”。它的功能是,如果标识符未被#defin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版石材施工合同大全:范本与深度解读
- 二零二五版抖音平台短视频内容审核与合规合作协议
- 2025年度宅基地使用权转让及配套基础设施建设合同
- 二零二五年度汽车商业险融资担保协议
- 二零二五版物流仓储智能管理系统建筑工程施工框架协议
- 广告牌维修工程施工合同书(2025版)
- 家庭新房装修合同2025年
- 公司业务保密协议2025年
- 工程追加合同范本2025年
- 合伙股份协议书范本2025年
- 2025年甘肃省高考地理试卷真题(含答案解析)
- YS/T 724-2016多晶硅用硅粉
- GA 802-2019道路交通管理机动车类型
- 大肠癌教学讲解课件
- 热牙胶充填仪介绍
- 眼科常见疾病病人治疗及护理
- DB4401-T 112.2-2021 城市道路占道施工交通组织和安全措施设置+第2部分:交通组织方案编制-(高清现行)
- 癫痫病人的急救与护理课件
- 《大果高油开农花生栽培技术规程》
- JJF(纺织) 080-2018 纺织检针机校准规范-(高清现行)
- 典型发酵过程动力学以及模型
评论
0/150
提交评论