欢迎来到天天文库
浏览记录
ID:52856907
大小:348.96 KB
页数:25页
时间:2020-03-27
《程序设计内容教程(用C、C++语言编程)第10课时 编译预处理.pptx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、编译预处理chapter10华中科技大学信息大类平台课——C语言程序设计目录content宏定义1文件包含2条件编译3其他编译预处理410.1宏定义在C语言源程序中允许用一个标识符来表示一个字符串,成为“宏”。宏定义是由源程序中的宏命令完成的,其一般格式如下:#define是宏定义命令,一个#define只能定义一个宏。若需要定义多个宏,就需要使用多个#define命令。被定义为“宏”的标识符称为“宏名”;字符串成为“宏体”,可以是常量、关键字、语句、表达式或者空白等。在预编译处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去替换,成为“宏替换”或“宏展开”。宏替换由预处理程序
2、自动完成的。在C语言中,“宏”分为有参数和无参数两种,下面分别讨论这两种“宏”的定义与调用#define标识符字符串10.1.1不带参数的宏宏名后不带参数时,表示用一个指定的标识符来代表一个字符串,也就是定义符号常量。例如,下面定义了两个无参数宏:这两个宏定义将符号常量TRUE定义为1,FALSE定义为0。接下来以一个例子来更加详细的进行说明。#defineTRUE1#defineFLASE0if(x==TRUE)printf(“TRUE”);elseif(x==FALSE)printf(“FALSE”);if(x==1)printf(“TRUE”);elseif(x==0)print
3、f(“FALSE”);双引号中的TRUE和FALSE不被替换,符号常量出现在双引号中时,将失去定义过的含义,而仅仅作为一般字符串使用。例子:在进行了预编译处理后,程序中的符号常量被定义它们的常量替换10.1.1不带参数的宏在宏定义语句中,可以使用已经定义过的宏,即允许宏的嵌套#defineR3#definePI3.14159#defineL2*PI*R宏嵌套:宏定义应用:1、使用宏名代替一个字符串,可以减少程序中重复书写某些字符串的工作量,而且简单不易出错,容易记忆。2、当需要改变某一个常量时,只要改变#define命令行,做到一改全改。10.1.2带参数的宏C语言允许宏带有参数。在宏
4、定义中的参数称为形参,在宏调用中的参数叫做实参。在调用带参数的宏时,不仅要进行宏替换,而且要用实参去替换形参。带参数的宏的定义一般形式为:调用带参数的宏的一般形式为:#define宏名(形参表)字符串宏名(实参表)#include#defineMAX(x,y)((x>y)?x:y)voidmain(){inta,b;a=6;b=9;printf(“Maxnumberis%d,MAX(a,b));}例10.1带参数的宏带参数的宏定义运行结果:Maxnumberis9调用带参数的宏10.1.2带参数的宏1、函数调用时,先求出实参表达式的值,然后带入形参,而使用带参数的宏,
5、则只是进行简单的字符替换,不进行计算。2、函数调用时在程序运行时处理的,需要分配临时的内存单元;而宏展开则是在编译时进行的,在展开时并不分配内存单元,也不进行值传递处理,也没有“返回值”的概念。3、对函数中的实参和形参都要定义类型,二者的类型要求一致,如果不一致,则应进行类型转换;而宏不存在类型问题,宏名无类型,它的参数也无类型,只是一个符号代表,展开时代入指定的字符即可。宏定义时,字符串可以是任何类型的数据。带参数的宏与函数的区别:10.1.2带参数的宏4、调用函数值可能得到一个返回值,而用宏可以设法得到几个结果。例如,如下宏定义语句:当调用这个宏时,可以得到三个结果。5、使用宏次数
6、多时,宏展开后源程序增长;而函数调用不会是源程序变长。6、宏替换不占运行时间,只占编译时间;而函数调用则占用运行时间。带参数的宏与函数的区别:#defineCIRCLE(R,L,S,V)L=2*PI*R;S=PI*R*R;V=4.0/3.0*PI*R*R*R10.1.3使用宏定义时应注意问题1、宏名一般习惯上使用大写字母表示,以与变量名相区别。2、宏定义用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种简单的替换,预处理程序对它不做任何检查。如果有错误,只能在编译已将宏展开后的源程序中发现。3、宏定义不是说明或语句,在行末不必加分号,如果加上分号,则连分号也一起置换。4
7、、带参宏定义中,宏名和形参表之间不能有空格出现。例如如果写成:就会被认为是无参宏定义,宏名MAX代表字符串(a,b)(a>b)?a:b。这显然与我们的初衷不符。#defineMAX(a,b)(a>b)?a:b#defineMAX(a,b)(a>b)?a:b10.1.3使用宏定义时应注意问题5、在宏定义中,字符串内的形参通常要用括号括起来以避免出错。例如:宏定义则POWER(a+b)这样的调用形式将被编译成a+b*a+b,与我们预期的效果不符,应
此文档下载收益归作者所有