点点滴滴访问量:
 

 带参宏定义

1.带参宏定义的一般格式

#define   宏名(形参表)   语言符号字符串

字符串中包含在括弧中所指定的参数,如:

define S(a,b) a*b

Area = S(3,2);

2.带参宏的调用和宏展开

1)调用格式:宏名(实参表)

2)宏展开:用宏调用提供的实参字符串,直接置换宏定义命令行中、相应形参字符串,非形参字符保持不变。

3.说明

1)定义有参宏时,宏名与左圆括号之间不能留有空格。否则,C编译系统将空格以后的所有字符均作为替代字符串,而将该宏视为无参宏。

2)有参宏的展开,只是将实参作为字符串,简单地置换形参字符串,而不做任何语法检查。在定义有参宏时,在所有形参外和整个字符串外,均加一对圆括号。

3)虽然有参宏与有参函数确实有相似之处,但不同之处更多,主要有以下几个方面:

1)调用有参函数时,是先求出实参的值,然后再复制一份给形参。而展开有参宏时,只是将实参简单地置换形参。

2)在有参函数中,形参是有类型的,所以要求实参的类型与其一致;而在有参宏中,形参是没有类型信息的,因此用于置换的实参,什么类型都可以。有时,可利用有参宏的这一特性,实现通用函数功能。

3)使用有参函数,无论调用多少次,都不会使目标程序变长,但每次调用都要占用系统时间进行调用现场保护和现场恢复;而使用有参宏,由于宏展开是在编译时进行的,所以不占运行时间,但是每引用1次,都会使目标程序增大1次。 

posted on 2007-12-14 17:27  sopper  阅读(1000)  评论(0编辑  收藏  举报