- 0
- 0
- 约2.98千字
- 约 14页
- 2017-12-26 发布于河北
- 举报
3.3 编译预处理 - 副本
编译预处理 概念:所谓编译预处理,就是在编译之前先对程序所做的处理。 C提供的预处理功能有三种,这些命令前都有一个“#”,以区别于其它C语句。 1.宏定义 :#define 预处理命令 2.文件包含 :#include 3.条件编译 :#if...else §1 宏(Macro)定义 无参数的宏定义 带参数的宏定义 一、不带参数的宏定义 不带参数的宏定义:用一个指定的标识符来代替一个字符串。其一般形式: #define 标识符 字符串 如: #define PI 3.14159 则在以后程序中标识符PI用来表示3.14159,如果有语句 area=PI*3*3; 则该语句在编译时将被替换为 area=3.14159*3*3; 标识符“PI”被称为“宏名”,这个替换过程称为“宏展开”。#define语句被称为宏定义。 注意,不能将宏定义写成#define PI=3.14159 宏名一般用大写字母,以区别于普通的变量 。 宏替换过程只是简单的字符串替换,并不做语法检查。 宏定义一般不在行末加分号,若有分号,则一起参加替换。如,若有定义: #define PI 3.14159; 则对于程序中的语句: area=PI*3*3; 将被展开为:area=3.14159;*3*3; 宏名的作用范围从定义之处起到本文件结束。若要终止其作用域,可使用#undef命令。 在进行宏定义时,可以引用已定义的宏名,即宏可以嵌套定义。如: #define PI 3.1415 #define R 3.0 #define L 2*PI*R #define S PI*R*R main( ) { printf(L=%f\n=%f\n,L,S); } 用双引号括起来的字符不进行替换,如上例。 二、带参数的宏定义 带参数的宏定义:在替换字符串的同时进行参数替换 。其一般形式: #define 标识符(参数列表) 字符串 其中字符串中包含括号中指定的参数列表。 如: #define S( a , b ) a*b 则在以后程序中如果出现语句 area=S ( 3.0 , 2.4 ) ; 则该语句在编译时将被替换为 area= 3.0 * 2.4; 带参数的宏在进行宏展开时,和函数的调用很相似。如下例所示: 求圆的面积 : #define PI 3.14159 #define S(r) PI*( r )*( r ) main() { printf(“圆的面积为:%f”,S(3.6) ); } 求两数中的较大者,可以用宏来实现为: #define max(x , y) ( ( x ) ( y ) ? ( x ): ( y )) main( ) { int a=5,b=8,c; c=max(a,b); ……} 函数与宏的区别 在以上两例中,之所以要把宏定义中的参数用括号括起来(而在函数中,参数是不用括号括起来的),是因为带参数的宏不同于函数: 函数调用时先求解实参表达式的值,然后代入形参;而使用带参数的宏只是进行简单字串替换。如对于上例,若将宏定义为: #define S( r ) PI * r * r 则对于语句 area=S(3+1); 将被宏展开为 area=3.14159* 3+1* 3+1 ; 显然这不是编程者所期望的。更加危险的是:对于这种“错误”,C编译器并不报告,而且结果也和正确结果相差不多,大大增加了排错的难度。 函数与宏的区别 函数名与括号之间可插入有空格,而带参数的宏名与括号之间则不能有空格。因为空格将作为宏名的结束标记。如,若有宏定义: #define S ?(r) PI * r * r 则对于语句 area=S(a); 进行宏展开后为 area=(r) PI*r*r(a); 函数必须有类型,而宏则无类型问题,只是作一简单字符串替换。 宏展开不占运行时间,只占编译时间,而函数调用占运行时间。因此,使用宏可以比函数调用更快。 函数与宏的区别 函数只能有一个返回值,而合理利用宏则能得到多个值。如下例: #define PI 3.14159 #define CIRCLE(R,L,S,V)
您可能关注的文档
最近下载
- 中学生交通安全教育培训课件PPT.pptx VIP
- 牵引供电系统 牵引变电所供电方式 牵引变电所供电方式.ppt VIP
- 1.03 玉米高产管理技术 - (先锋克劳森).pptx VIP
- 杜邦公司讲座杜邦安全管理介绍.pptx VIP
- 2025年广西财经学院辅导员招聘考试笔试模拟试题及答案解析.docx VIP
- (正式版)DB65∕T 3611-2023 《农业用水定额》.pdf VIP
- 2025年江苏省南京市中考英语试卷(含解析).pdf VIP
- (2025年版)国家基层高血压防治管理指南PPT课件.pptx VIP
- 2024年山东交通职业学院高职单招(英语/数学/语文)笔试题库含答案解析.docx VIP
- 2017年-2022年暨南大学考研701美学原理真题.pdf
原创力文档

文档评论(0)