解题思路:
带参数的宏定义:
除了一般的字符串替换,还要做参数代换
格式: #define 宏名(参数表) 字符串
例如:#define S(a,b) a*b
area=S(3,2);第一步被换为area=a*b; ,第二步被换为area=3*2;
类似于函数调用,有一个哑实结合的过程:
(1)实参如果是表达式容易出问题
#define S(r) r*r
area=S(a+b);第一步换为area=r*r;,第二步被换为area=a+b*a+b;
正确的宏定义是#define S(r) ((r)*(r))
(2)宏名和参数的括号间不能有空格
(3)宏替换只作替换,不做计算,不做表达式求解
(4)函数调用在编译后程序运行时进行,并且分配内存。宏替换在编译前进行,不分配内存
(5)宏的哑实结合不存在类型,也没有类型转换。
(6)函数只有一个返回值,利用宏则可以设法得到多个值
(7)宏展开使源程序变长,函数调用不会
(8)宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值)
参考代码:
#include<stdio.h> #define S(a,b) b,a int main() { int a,b; scanf("%d%d",&a,&b); printf("%d %d",S(a,b)); return 0; }
0.0分
1 人评分
蓝桥杯历届试题-九宫重排 (C++代码)浏览:2813 |
【出圈】 (C语言代码)浏览:824 |
C语言程序设计教程(第三版)课后习题8.5 (C语言代码)浏览:956 |
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:683 |
C二级辅导-分段函数 (C语言代码)浏览:659 |
良心推荐——>题解1049:C语言程序设计教程(第三版)课后习题11.1 (C语言描述——简单明了,时间复杂度低)浏览:1318 |
C语言训练-8除不尽的数 (C语言代码)浏览:1469 |
整除的尾数 (C语言代码)浏览:853 |
C语言程序设计教程(第三版)课后习题9.6 (C语言代码)浏览:611 |
简单的a+b (C语言代码)浏览:617 |