- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第7章 编译预处理 本章内容 文件包含 宏定义 1 2 编译预处理 编译预处理是 C语言编译系统的一个组成部分。C编译系统对程序进行编译之前,先对程序中以 # 开头的特殊命令进行“预处理”,然后将预处理结果和源程序一起进行编译处理,得到目标代码。 C语言提供的预处理功能主要有三种:宏定义、文件包含、条件编译。不属于c语言语句,可出现在程序的任何位置,有效范围从它们的出现点开始。 宏定义 C语言中的宏定义分为: 不带参数的宏定义和带参数的宏定义 在C语言源程序中允许使用“宏”,即用一个指定的标识符表示一个字符串。其中标识符称为“宏名”,字符串称为“宏体”。在编译预处理时,对程序中所有出现的“宏名”,都用宏体去替换,这个替换过程称为“宏代换”或“宏展开”。 不带参数的宏 宏名:由标识符定义 宏体: 为一字符串 例如: #define PI 3.1415926 功能: 编程时用宏名PI来代替“3.1415926”这个字符串,在编译预处理时,把程序中在该命令以后出现的PI用3.1415926替换。 不带参数宏定义一般形式: #define 宏名 宏体 不带参数宏举例 #define PI 3.1415926 main() { float a,s,r; printf(“input radius r:”); scanf(“%f”,r); a=2*PI*r; s=PI*r*r; printf(“r=%f, a=%f, s=%f \n”, r,a,s); } 宏展开后: a=2*3.1415926*r; s=3.1415926*r*r; 不带参数宏注意事项 1. 宏名通常用大写字母表示,这并不是语法规定,只是为了与变量名区别。 2. 宏定义不是c语句,不必在行末加 ;号。 3. 宏定义的位置通常放在程序的开头,作为文件的一部分,其作用域为从宏定义位置开始到此文件结束。但可以用 “#undef 宏名”命令终止宏定义的作用域,这样可以灵活控制宏定义的作用范围。 4. 若用户标识符中的一部分与宏名相同,则在预处理时不对其进行替换。例如: #define LT 200 main( ) { int PLTER=10;……} 宏名LT不会替换变量名PLTER中的LT。 不带参数宏注意事项 5. 宏定义允许嵌套。即在进行宏定义时,可以在宏体中使用已定义的宏名,在预处理时进行层层替换。 例 #define R 3.0 #define PI 3.14159 #define S PI*R*R main( ) { printf(“%f\n”,S); } 6. 同一个宏名不能重复定义。 带参数的宏 带参数的宏定义一般形式: #define 宏名(形式参数) 宏体 宏体: 应包含形参 例如:#define AS(x,y,z) x+y+z …… sum=AS(3,4,5); 功能: 预编译时用宏体代换宏名,同时用实参代换形参。即用3+4+5代替AS(3,4,5) 带参数宏举例 #define MIN(a,b) ab?a:b main( ) { float x,y,min; scanf(“%f%f”,x,y); min=MIN(x,y); printf(“min=%f\n”,min); } 经宏展开后为: min=xy?x:y; 带参数宏注意事项 说明: 1. 在宏名与带参数的括号之间不应加空格 2. 同一个宏名不能重复定义 3. 注意带参数的宏与函数不同 A. 函数在运行时处理,宏在编译时进行,不占运行时间 B. 函数中形参与实参要进行定义数据类型;宏不需要 C. 宏展开后可使程序变长;函数调用源程序长度不变 文件包含 文件包含的一般形式: #include “文件名” 或: #include 文件名 功能:用指定文件的全部内容来替换该命令行,使之成为源程序一部分。 说明: 1. 一个 #include 命令只能指定一个包含文件。 2. 文件包含可以嵌套。 3. 当包含文件修改后,对包含该文件的源程序必须重新进行编译连接处理。 4. #include “文件名”形式,系统先在引用被包含文件源文件所在目录中寻找,找不到再按标准方式检索其他目录; #
文档评论(0)