是在编译前由编译系统中的预处理程序对源程序的预处理命.pptVIP

是在编译前由编译系统中的预处理程序对源程序的预处理命.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
是在编译前由编译系统中的预处理程序对源程序的预处理命.ppt

“编译预处理”是C语言编译系统的一个组成部分。是在编译前由编译系统中的预处理程序对源程序的预处理命令进行加工。 第8章 编译预处理 本章教学目标: 理解include命令的含义,熟练掌握include命令的用法; 掌握#define命令的使用; 了解条件编译的各种形式和意义。 第8章 编译预处理 8.1 文件包含#include 命令 8.2 宏定义#define 命令 8.3 条件编译 8.1 文件包含#include 命令 文件包含由#include命令来说明。编译预处理时,系统将包含文件的内容插入到程序中引用它的地方,即程序中相应的#include命令所在处。 文件包含的一般形式为: #include 文件名 和 #include “文件名” 例如,#include“math.h” 特别注意 (1) 每行写一句,只能写一个文件名,结尾不加分号“;”。被包含的文件必须是源文件而不能是目标文件。 (2) 文件包含可以嵌套。 (3) 当一个文件中有多条include命令将自己编写的文件包含进来时,应注意它们的先后次序。 (4) 在include命令中,文件名可以用尖括号或双引号括起来,二者都是合法的。其区别是用尖括弧时,系统到存放C库函数头文件所在的目录中去寻找要包含的文件。用双引号时,系统先在用户当前目录中寻找要包含的文件,若找不到,再按标准方式查找。 8.2 宏定义#define 命令 使用#define命令指定一个标识符(即名字)来代表一个字符串。宏定义分为不带参数和带参数两种。 【例8.1】不带参数的宏定义的应用。 #define PI 3.1415926 main( ) { float r, circle, area; printf(“\nPlease input radius: “); scanf(“%f”,r); circle = 2 * PI * r; area = PI * r * r; printf(“\ncircle=%f,area=%f”,circle, area); } (9)宏定义通常放在源程序文件的开头,其作用域是整个源程序。也可以在函数内部作宏定义,这时宏名字的作用域只在本函数。可用#undef终止宏定义的作用域: (10)与变量定义不同,宏定义只作字符替换,不分配内存空间,也不做正确性检查。 (11)宏定义时可以不包含宏体,即写成: #define 宏名 此时仅说明宏名已被定义。 二、 带参数的宏定义 带参数的宏更具灵活性。定义的一般形式为: #define 宏名(参数表) 宏体 例 #define RECT(A, B) A*B 宏替换时,当实参取不同值时,宏将取得不同的值,这是使用带参数宏定义的优点。 对于带参数的宏定义,使用中应注意以下问题: (1)定义带参数的宏时,宏体中一般应含有参数。另外,宏名与圆括弧之间不应留有空格; (2)为了保证宏展开的正确性,通常宏体中的参数以及宏体本身都用圆括弧扩起来; (3)ANSI C提供了两个预处理操作符:#和##。这两个操作符用于宏体中。#操作符使跟在它后面的实参转换为带引号的字符串。##操作符用于连接两个符号。 (4)带参的宏与函数很相似,当两者是有着本质上的区别的。 宏定义与函数的区别 (1) 引用宏只占编译时间,不占运行时间。 (3) 宏替换的形参无类型 (4) 实参为表达式的情况 函数调用是先计算出实参的值, 再将值传递给形参; 宏的引用是用表达式替换形参. 【例8.2】使用宏得到多个结果。 #define PI 3.1415926 #define SPHERE(R,C,S,V) C=2*PI*R; S=4*PI*R*R;\ V=4.0/3*PI*R*R*R void main() { float r, c, s, v; printf(Input the Spheres radius: ); scanf(%f,r); SPHERE(r, c, s, v); printf(r=%f, c=%f, s=%f, v=%f\n, r, c, s, v); } 宏调用语句 SPHERE(r, c, s, v); 经预编译宏展开后变成为三条语句: c=2*3.1415926*r; s=4*3.1415926*r*r; v=4.0/3*3.1415926*r*r*r; 程序的运行情况为: Input the Spheres radius: 10? r=10.000000, c=62.831852, s=1256.637085, v=4188.790133 【例8.3】 从键盘输入

文档评论(0)

sunguohong + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档