全站数据
8 4 2 0 5 8 1

宏定义的参数

鹭岛黄药师 | 简单学习,快乐成才!         
问题更新日期:2024-10-11 01:45:51

问题描述

宏定义的参数希望能解答下
精选答案
最佳答案

格式:#define宏名(参数表)字符串例如:#defineS(a,b)a*barea=S(3,2);

第一步被换为area=a*b;,第二步被换为area=3*2;类似于函数调用:

(1)实参如果是表达式容易出问题#defineS(r)r*rarea=S(a+b)

;第一步换为area=r*r;,第二步被换为area=a+b*a+b;正确的宏定义是#defineS(r)((r)*(r)

)(2)宏名和参数的括号间不能有空格(3)宏替换只作替换,不做计算,不做表达式求解(4)函数调用在编译后程序运行时进行,并且分配内存。宏替换在编译前进行,不分配内存(5)宏的哑实结合不存在类型,也没有类型转换。

(6)函数只有一个返回值,利用宏则可以设法得到多个值(7)宏展开使源程序变长,函数调用不会(8)宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值)