宏替换只是字符替换吗 宏定义有参数类型吗?
宏定义有参数类型吗?
宏定义当然可以有参数类型。显示以下步骤。你可以自己调试。
#定义最大值(a,b)?A:B/*带参数类型的宏定义,用于确定要保留的两个数字中的较大者*/
#include
void main()
{
int m,N,max_Num=0
scanf(%d%d“,&m,&n)/*输入两个整数*/
max从键盘输入Num=max(m,N)/*调用max(m,N)宏定义,并将两个数字中的较大者保存在变量maxuin num*/
带参数宏定义和函数的区别?
1中。当编译器编译源代码时,宏将被简单地替换,没有任何逻辑检测,即简单的代码复制。
2. 定义宏时不考虑参数类型。
3. 参数宏的使用将使具有相同功能的代码块在目标文件中有多个副本,这将增加目标文件的大小。
4. 参数宏的运行速度比函数快,因为不需要参数栈的压出操作。
5. 在定义参数宏时,应该更加小心,并添加更多的方括号。
6. 该函数只存在于目标文件中的一个位置,这样可以节省程序空间。
7. 函数的调用会涉及参数的传递,压栈/出栈操作比较慢。
8. 函数的参数有传递值和地址(指针)的问题,但参数宏不存在。
宏定义的参数?
格式:#define macro name(parameter table)string,例如:#define s(a,b)a*bar=s(3,2);第一步改为area=a*b,第二步改为area=3*2,类似函数调用:(1)如果实际参数是表达式,很容易出现问题#define s(R)R*rarea=s(a,b) 第一步改为area=R*R,第二步改为area=a,b*ab正确的宏定义是#definitions(R)((R)*(R))(2)宏名和参数的括号之间不应留空格(3)宏替换只是替换,不是计算,非表达式求解(4)在编译程序运行时执行函数调用,并分配内存。宏替换在编译之前执行,不分配内存。(5) 在虚宏和实宏的组合中没有类型或类型转换。(6) 一个函数只有一个返回值,使用宏可以获得多个值。(7) 宏扩展会使源程序变长,而函数调用不会。(8) 宏扩展不占用运行时间,只占用编译时间,函数调用占用运行时间(内存分配、字段保留、值转移、返回值)
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。