c语言基础教程 第六章 预处理功能和类型定义.doc

c语言基础教程 第六章 预处理功能和类型定义.doc

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六章??????预处理功能和类型定义 ?6. 1 预处理功能概述 ??? 本节主要讲述预处理功能的特点。 ??? 预处理功能是由很多预处理命令组成,这些命令将在编译时进行通常的编译功能〔包含词法和语法分析、代码生成、优化等〕之前进行处理,故称为预处理.预处理后的结果和源程序一起再进行通常的编译操作,进而得到目标代码。 ??? 预处理功能主要包括如下三种;宏定义、文件包含和条件编译。 ??? 这些功能是通过相应的宏定义命令、文件包含命令和条件编译命令来实现。这些命令不同于C语言的语句,因为它们具有如下的特点: ??? (1)多数预处理命令只是一种替代的功能,这种替代是简单的替换,而不进行语法检查。 ??? (2)预处理命令都是在通常的编译之前进行的,编译时已经执行完了预处理命令,即对预处理后的结果进行编译,这时进行词法和语法分析等通常的程序编译。 ??? (3)预处理命令后面不加分号,这也是在形式_七与语句的区别。 ??? (4)为了使预处理命令与一般C语言语句相区别,凡是预处理命令都以井号(#)开头。 ??? (5)多数预处理命令根据它的功能而被放在文件开头为宜,但是根据需要,也可以放到文件的其他位置。不要产生错觉,好像所有的预处理命令都必须放在文件开头。 ??? 学习和掌握预处理功能时,应该了解它的上述规定,以便正确地使用和理解这些预处理命令。 6.2.1 简单宏定义 ????1.简单宏定义的格式和功能 ??? 简单宏定义的格式如下: ??? #define标识符)(字符串} ??? 其中,define是关键字,它表示该命令为宏定义,悦标识符)是宏名,它的写法同标识符。字符串用来表示标识符所代表的字符串。 ??? 简单宏定义是定义一个标识符(宏名)来代表一个字符串。 ??? 前面讲过的符号常量就是用这种简单宏定义来实现的。例如: ??? #define PI 3??? 这是一条宏定义的命令,它的作用是用指定的标识符PI来代替字符串3在程序中出现的是PI,在编译前预处理时,将所有的PI都用3.代替,即使用宏名来代替指定的字符串。这一过程又称为宏替换或称为宏展开. ????[例6.1]?给出半径求圆的面积。 ??? 执行该程序,出现如下信息: #dfine PI 3main ( ) { ??? fioat r, s, ? Printf(Input radius;) ? scanf(%f,r); ??? A=PI *r*r ?Printf(:a=%.4f\n:,a); } 执行该程序,出现如下信息: Input radius; 5 ??? 输出结果如下 ??? s=78. 5398 ??? 说明:该例中,开始率义了符号常量PI,它是用宏定义来实现的。程序中出现的PI,在编译前预处理时将用3替换。 ??? 2.使用简单宏定义时的注意事项 ??? (1)宏定义中的标识符)(即宏名)一般习惯用大写字母,以便与变量名区别。这样。在C语言程序的各表达式语句中,凡是大写字母的标识符(指全部大写字母)一般是符号常量。但是,宏定义中的宏名也可以用小写字母。 ??? (2)宏定义是预处理功能中的一种命令,它不是语句。因此。行末不需加分号。如果加了分号,则该分号将作为所定义的字符串的一部分,即按字符串的一部分来处理。 ??? (3)宏替换是一种简单的代替,替换时不作语法检查。如果所定义的字符申中有错,例如,将数字。,误写为字母。,预处理照样代换,并不报错,而在编译中进行语法检查时才报错。因此,要记住宏替换操作只是简单的代换,用宏定义时的字符串来替换其宏名。 ??? (4)宏定义中宏名的作用域为定义该命令的文件中,并从定义时起,到终止宏定义命令( #undef标识符))为止,如果没有终止宏定义命令,则到该文件结束为止。通常放在文件开头,表示在此文件内有效。 ???终止宏定义命令的格式如下: ??? #undef(标识符) ??? 其中,undef是关键字,(标识符)表示要终止的宏名,该宏名是在该文件中已定义的标识符。例如: ??? #undef PI ??? 表示宏定义的PI到此终止,即终止后的PI不再代表所定义的字符串了。 ??? (5)宏定义可以嵌套。所谓嵌套是指在进行宏定义时,可以引用已定义的宏名。例如: ??? #define WIDTH 10 ??? #define LENGTH (WIDTH十10) ??? #define AREA (LENGTH,WIDTH ) ??? 在第二个宏定义中引用了第一个宏定义的宏名WIDTH,而在第三个宏定义中引用了第一个宏定义的宏名WIDTH和第二个宏定义的宏名LENGTH,第二个和第三个宏定义便是宏定义的

文档评论(0)

hong333666 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档