1、先介绍一下什么是宏定义
宏定义属于C语言编译系统中编译预处理中的一部分(但编译预处理不是C语言的语句),其作用是为编译系统提供必要的前置信息,告诉编译系统在源程序进行编译之前应该做些什么。它有利于程序的模块化设计,提高代码效率,增加了程序的可读性,方便程序的调试和移植。
例如: 宏定义如下:#define 宏名 宏体
#define PI 3.1415926 /*用PI代表3.1415926*/
#define PR printf /*用PR表示printf*/
一定是要定义完后才可使用,使用宏名可以有效减少程序中重复书写的某些宏体的工作量,其有效范围是从定义的位置到文件的结束。
2、带参数的宏定义
带参数的宏定义,即宏名后面可以带有形式参数,在宏体中包含宏名后面的参数。
一般形式为:#define 宏名(参数表) 宏体
#define L(X)(X)*(X)*(X)
3、区别
带参数的宏定义与有参函数很相似,使用的时候要注意两者的区别:
(1)函数调用要求实参和形参类型一致,如实参是表达式:必须先计算出值。,然后再传递给形参,宏体也无类型,宏展开只进行参数的简单替换。
(2)函数调用是在程序运行时处理,为形参分配临时的内存单元,可以有返回值:而宏展开是在编译前进行的,展开时并不为形参分配内存单元,不进行值的传递,没有返回值的概念
(3)调用函数最多得到一个返回值,而用宏定义可以设法得到多个值。
(4)宏展开会使源程序变长,而函数调用不会使源程序变长。
(5)宏替换不占运行时间:只占编译时间,而函数调用则占运行时间(分配存储空间,保国现场值传递、返回等)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)