ImageVerifierCode 换一换
格式:DOCX , 页数:6 ,大小:24.83KB ,
资源ID:8649166      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8649166.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C第11章教学zp.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C第11章教学zp.docx

1、C第11章教学zp第十一章 编译预处理(P181)111 编译预处理一、宏定义 #define二、带参数的宏定义 三、取消宏定义 #undef 宏名。112 文件包含处理 第十一章 编译预处理111 编译预处理C中预处理命令的作用是告诉编译系统在对源程序编译之前应该做什么。正确地使用编译预处理功能可有效底提高程序的开发效率。编译预处理命令有三种:文件包含、宏定义和条件编译。为了和程序语句区别,编译预处理命令以#号开头(前面没有空格)且占用一个单独的书写行,命令尾不使用分号作为结束符。一、 宏定义 #define(P179)所谓宏定义就是用一些比较容易理解或具有物理意义的符号代替另一些数据或文本

2、,其意义在于:不仅可提高程序的易读性,还便于程序的维护和修改。1不代参数的宏定义就是用一个指定的标识符(即宏名)来代表一个字符串。宏定义的一般形式为: #define 标识符 字符串例如:#define YES 1#define NO 0功能是:将符号常量YES定义为1,NO定义为0,其中,YES和NO称为宏名。在编译预处理时,编译系统把程序中出现的YES(或NO)一律用1(或0)替换。if (x=YES) printf(“correct!”)else if (x=NO) printf(“error!”)在执行编译处理后,即为:if (x=1) printf(“correct!”)else i

3、f (x=0) printf(“error!”)案例 11。1 定义宏表示圆周率常数#include#define PI 3.14159void main() float c; c=2*PI*3.0; printf(c=%fn,c);案例11。2 定义宏表示代码行 #include#define PRT printf(n);void main() printf(*); PRT printf(*); 说明:(1)宏名习惯上一般用大写字母表示,以区别于变量名;(2)宏定义是用宏名代替一个字符串,他只是做简单的替换,不做语法检查;例如: #define PI 3.i4i159 只要当编译系统在编译已

4、被宏代换的源程序时,才会检查出错误。(3)宏定义不同于C语句,不能在末尾加分号;(4)在宏定义命令中,可以使用已经定义过的宏名,即宏定义可以层层代换。案例 11。3 分析如下程序结果#include#define A 40#define B1 (A+20)#define B2 A+20#define C1 B1*A#define C2 B2*Avoid main() printf(c1=%dn,C1); printf(c2=%dn,C2);分析:置换后:printf(“c1=%dn”,(40+20)*40);printf(“c1=%dn”,40+20*40);(5)同一宏名不能重复定义;(6)

5、替换文本不能替换双引号中与宏名相同的字符串;例如:printf(“YES”)中的YES。二、带参数的宏定义 P180带参数的宏定义是更高级的宏定义,不仅要进行字符串替换,同时还要进行参数替换。一般形式为: #define 宏名(参数表) 字符串例如:#define POWER(x) (x)*(x)其中,POWER是宏名,x是形参。案例 11。4 分析程序#include#define POWER(x) (x)*(x)void main() int a=4,b=6,c; c=POWER(a+b); printf(c=%d,c); 分析:在程序编译时,进行宏展开即为: c=(a+b)*(a+b)若

6、定义为: #define POWER(x) x*x则宏展开为:c=a+b*a+b*带参数的宏与函数比较在使用形式和特性上与函数相似,但本质不同:函数的调用是在程序运行时处理的,而宏的代换是在编译之前进行的;函数调用时需先求出实参表达式的值,然后代入形参,而使用带参数的宏只是进行简单的字符替换。例如上例中的POWER(a+b)在替换时并不先求a+b的值,而只是将实参a+b代替形参x;函数调用时存在着从实参向形参的传递数据的过程,而带参数的宏不存在这种值的传递,也没有返回值的概念;函数调用时,对使用的实参有一定的数据类型的限制,即一般要求实参与形参类型一致,而带参数的宏的实参可以是任意类型的数据;

7、使用函数调用会占用较多的运行时间,而宏替换只占编译时间。三、取消宏定义 #undef 宏名。例如:#define PI 3.14main()#undef PI112 文件包含处理 文件包含处理#include的作用是将已定义好的头文件包含到代码文件中。编译预处理中的文件包含通常有以下两种形式:形式一:#include文件名形式二:#include“文件名”例如:#includestdio.h文件包含的功能是:在编译源程序之前,用指定文件中(如stdio.h)的内容取代该预处理命令。即是从磁盘中读取该文件,然后把他写入源程序中预处理命令#include的位置上,使他成为源程序的一部分,然后和源程

8、序一起作为一个整体进行编译。说明:(1)形式一通常用于系统头文件的嵌入,形式二用于用户创建的某个代码文件的嵌入;(2)通常,在开发较大的C程序时,会将一些常用的宏定义、结构类型定义、函数说明语句等由多个开发员共用的一些信息统统放在一个文件中,该文件的后缀通常为 .h(h表示header,用 .c也可以),称为标题文件或头文件。每个程序员都可以用一个#include命令将这个头文件包含在自己的文件加以使用,这样可以提供一种标准化手段,即每个程序员都使用具有相同值的相同定义。此外使每个程序员节省时间开销,减少错误的发生。案例11。5 分析如下程序用户自定义头文件:format.h#define P

9、RINTD(d) printf(integer out:%dn,d);#define PRINTF(f) printf(float out:%fn,f);#define PRINTS(s) printf(string out:%sn,s);#include#include#includeformat.h关于#include命令的几点说明:一个#include命令只能指定一个被包含文件,若要包含多个文件,需多次使用#include命令;#include命令可以嵌套使用;例如:在程序f1.c中有如下行: #include “f2.c”而在文件f2.c中又有如下行:#include “f3.c”则等价于在文件f1.c 中包含如下行: #include “f2.c”#include “f3.c”注意以上两个命令的顺序。#include两种命令的区别在于:当用“ ”包围文件时,其意义是指示编译系统按系统设定的标准方式搜索文件;而用双引号包围文件时,系统先在源文件(如f1.c)所在目录中搜索文件,若找不到,再按系统设定的标准方式搜索其他目录。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1