C语言 有参宏的定义与使用
有参宏的形式与函数有些相似,需要参数替换实现宏的展开。
1.有参宏定义的一般格式
#defme 宏名(形参表) 语言符号字符串
2.有参宏的调用
对于有参宏的调用需要传递参数,调用格式为:
调用格式:宏名(实参表)
对于有参宏的调用需要传递参数,调用格式为:
调用格式:宏名(实参表)
3.有参宏的展开
用宏调用提供的实参字符串直接置换宏定义命令行中相应形参字符串,非形参字符保持不变。
4.说明
①定义有参宏时,宏名与左圆括号之间不能留有空格。否则,C编译系统会将空格以后的所有字符均作为替代字符串,而将该宏视为无参宏。例如:
#define SUM(a,b) a+b
如果定义成如下形式,编译时会报错:
#define SUM (a,b) a+b
(2)有参宏的展开,只是将实参作为字符串简单地置换形参字符串,而不做任何语法检查。在定义有参宏时,在整个字符串外均加一对圆括号。
5.有参宏与有参函数的比较
虽然有参宏与有参函数确实有相似之处,但不同之处更多,主要有以下几个方面:
(1)调用有参函数时,是先求出实参的值,然后再复制一份给形参。而展开有参宏时,只是将实参简单地置换形参。
(2)函数调用是在程序执行期间调用时才处理的,为形参分配内存空间。而宏则是由预处理器在编译预处理阶段进行的,且宏不需要分配内存空间,不需要进行值的传递,也没有“返回值” o
(3)在有参函数中,形参是有类型的,所以要求实参的类型与其一致。而在有参宏中,形参是没有类型信息的,因此用于置换的实参,什么类型都可以。有时,可利用有参宏的这一特性,实现通用函数功能。
点击加载更多评论>>