C语言Define

一.不带参数的宏定义

不带参数的宏定义的格式: #define 标识符 字符或字符串

其中,标识符称为宏名。例如:#define PI 3.1415926

其作用是将宏名PI定义为实数3.1415926.在编译预处理时,将该define命令后所有出现PI的地方均用3.1415926来替换。这种替换过程称为“宏替换”或“宏扩展”或“宏展开”。

对于不带参数的宏定义以及宏替换有以下说明:

(1)习惯上,宏名用大写字母来表示,以区别于变量名。当然,从语法上讲,任一合法的标识符均可用作宏名。

(2)宏定义可出现在程序的任何位置。通常用宏定义放在源程序文件的开始。宏名的作用域为从宏定义开始到本源程序文件结束。

(3)在宏定义中可以使用已定义的宏名。

(4)宏扩展时,只对宏名做简单的代换,不作任何计算,也不作任何语法检查。若宏定义时书写不正确,会得到不正确的结果或编译时出现语法错误。

(5)若要终止宏名的作用域,可以使用预处理命令。

(6)当宏名出现在字符串中时,编译预处理不进行宏扩展。例如:

二.带参数的宏定义

带参数的宏定义在进行宏扩展时与不带参数的宏定义有所不同,进行预处理时,不仅对对应的宏名进行替换,而且对参数也进行替换。带参数宏定义的一般格式为:#define 宏名(参数表) 使用参数的字符或字符串

例如:#define AREA(a,b) a*b

          b=AREA(2.0,7.8)            //A

定义了求长方形面积的宏AREA,它带有两个参数,分别表示长和宽。使用带参的宏称为宏调用,在宏定义中的参数称为形参,在宏调用中给出的参数称为实参。在对宏调用进行扩展时,先依次用实参替代宏定义中的形参,并将替代后的字符串替代宏调用。如A行中的宏调用经宏扩展为:b=2.0*7.8即将实参替代宏定义中的形参,其余不变。注意:宏扩展仅作简单替代,不作任何计算。

对带参的宏定义,说明以下几点:

(1)当宏调用的实参可能包含表达式时,在宏定义中要用括号把形参括起来或在宏调用中把实参括起来,以便减少错误。

(2)在宏定义时,宏名与左括号间不能有空格,这与函数的定义是不一样的。若在宏名后有空格,则将空格后所有字符作为无参宏所定义的字符串,而不作为形参。例如:#define AREA (a,b) (a*b) 则编译预处理程序认为是将无参宏AREA定义为“(a,b) (a*b)”,而不将(a,b)作为参数。

3)当一个宏定义多余一行时,必须使用续行符“\”,即在按换行符(Enter键)之前先输入一个“\”。

(4)带参宏定义主要用来取代功能简单、代码短小、运行时间极短、调用频繁的程序代码,与内联函数的作用极其相似。




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值