C语言的宏展开,讲一下什么是宏展开,怎么实现?

要求:字符串替换(字符串里面的不能替换)层层置换带参数的宏替换范围替换ps:所谓c++宏展开,是不是就是对源代码的替换?用#define声明一下?后面三个是什么意思,求解... 要求:
字符串替换(字符串里面的不能替换)
层层置换
带参数的宏替换
范围替换
ps:所谓c++宏展开,是不是就是对源代码的替换?用#define声明一下?
后面三个是什么意思,求解释一下题目意思,感激不尽
展开
 我来答
逸_公子
推荐于2018-06-04 · TA获得超过186个赞
知道答主
回答量:183
采纳率:0%
帮助的人:52.2万
展开全部
对于C++宏展开,先说一点:
#define功能将源程序文件中出现的对宏的引用展开成相应的宏 定义,由预处理器来完成。经过预处理器处理的源程序与之前的源程序有所有不同,在这个阶段所进行的工作的确只是纯粹的替换与展开,没有任何计算功能。
对于“带参数的宏替换”,可以由下列代码尝试理解下

#include <stdio.h> #define min(x,y) ({ typeof(x) _x = (x);typeof(y) _y = (y); (void) (&_x == &_y); _x < _y ? _x : _y; }) //防止x和y为一个表达式和失去了类型检测功能;
#define min_replace(x,y) ({ x < y ? x : y; })
void main()
{
int x=1;
int y=2;

int result = min(x++,y);
printf("没有替换时的运行结果为:%d\n",result);
int x1=1;
int y1=2;
int result1 = min_replace(x1++,y1);
printf("替换之后的运行结果为:%d\n",result1);
return ;
}

需要注意:
宏名和参数表的括号间不能有空格。

宏替换只做替换,不做计算和表达式求解,这一点要格外注意。

函数调用在编译后程序运行时进行,并且分配内存。宏替换在编译前进行,不分配内存。

宏的哑实结合(哑实结合类似于函数调用过程中实参替代形参的过程)不存在类型,也没有类型转换。

宏展开使源程序变长,而函数调用则不会。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式