二级c语言第九章 预处理命令.pptVIP

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

工程训练中心 徐国海 第九章 预处理命令 内蒙古科技大学 工程训练中心 预处理命令概述 预处理命令 C语言提供的预处理命令有三种: 1、宏定义 2、文件包含 3、条件编译 例1:利用宏定义求圆的周长和面积。 #define PI 3.1415926 #define R 1.0 Void main( ) { float k, s;  k=2.0*PI*R;  s=PI*R*R;  printf(“周长=%f, 面积=%f\n″, k, s); } * * 所谓预处理,就是指源程序被正式编译之前所进行的处理工作,这是C语言和其他高级语言之间的一个重要区别。 所有的预处理指令均以“#”开头,在它前面不能出现空格以外的字符,而且在行结尾处没有分号。 “预处理命令” 的作用不是实现程序的功能,它们是发布给编译系统的信息。它们告诉编译系统,在对源程序进行编译之前应该做些什么,所以称这类语句为编译预处理命令。 C语言在执行一个C程序时,如果程序中有预处理命令,则首先进行编译预处理(即根据预处理命令对源程序进行预先处理),然后再将经过预处理的源程序编译成目标文件,而后进行目标文件的连接,当这些工作都顺利通过后,才最终执行目标代码。这种执行过程大大提高了编程效率。 宏定义是用一个标识符来代表一个字符串,其中标识符称为宏名。在编译预处理时,将会把宏名替换成它所代表的字符串,这个过程称为宏展开。 一、宏定义 (一)无参数宏定义 无参数宏定义的一般格式为: ? #define 标识符 字符串 ? 其中,标识符为用户自定义的合法的标识符,即宏名。 例如: ?#define PI 3.1415926 ?PI是宏名,它代表字符串3.1415926。 注意:不要认为PI是一个值为3.1415926的变量。 宏定义与变量定义不同,宏定义只是在编译预处理时做简单的字符串替换,并不需要系统分配内存空间;而定义变量则会在编译时得到系统分配的内存空间。 左面程序在编译前将进行宏展开,宏展开以后变为: #includestdio.h void main( ) { float k, s;  k=2.0*3.1415926*1.0;  s=3.1415926*1.0*1.0;  printf(“周长=%f, 面积=%f\n”, k, s); } 几点说明: ⑴ 宏名一般习惯用大写字母来表示,以便于与变量名相区分,但不是硬性规定,也可以用小写字母。同一个宏名不能重复定义。 ⑵ 宏定义是用宏名代替一个字符串,只做简单的替代,不做正确性检查。如果字符串书写错误,预处理时也照样进行替换。 ⑶ 用宏名来代替字符串,可以减少程序输入过程中重复输入的某些字符串。 ⑷ 宏定义时如果在行末有分号,则替换时连分号一起进行替换。例如: #define X 5; …… s=X*8; …… 则经过宏展开后,该语句为:s=5;*8。显然出现语法错误。因此在宏定义时,行末不要加分号。 ⑸ 在宏定义时,如果一行写不下时,需要在上一行的结尾处加上“\”来表示续行。例如:以下语句与 #define PI 3.14159是等价的 ⑹ 宏定义时,可以引用已经定义的宏名。例如: ? #define PI \ 3.14159 ?#define X 5 #define Y X+1 #define Z Y*X/2 若有执行语句: printf(“%d\n”,Z); 则输出结果是 7 ? 因为替换文本中Y*X/2相当于X+1*X/2,即为表达式5+1*5/2,结果为7。如果想要计算的是(X+1)*X/2,应该在宏定义时把X+1用括号括起来。例如:?#define Y (X+1) ?⑺ 通常#define命令写在文件的开头,其作用域为整个源文件;否则从宏定义命令之后到本源文件结束为止。 ? 在预处理时,将只对第二个RADIUM进行置换,而对第一个双引号中的RADIUM 系统并不对其做置换。 ⑻ 对于程序中写在双引号中的字符串,即使与宏名相同,也不对其进行置换。例如,如果程序中有以下语句:? ?#define RADIUM 234 …… printf(RADIU

文档评论(0)

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

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

1亿VIP精品文档

相关文档