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

要求:
字符串替换(字符串里面的不能替换)
层层置换
带参数的宏替换
范围替换
ps:所谓c++宏展开,是不是就是对源代码的替换?用#define声明一下?
后面三个是什么意思,求解释一下题目意思,感激不尽

对于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 ;
}

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

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

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

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

宏展开使源程序变长,而函数调用则不会。
温馨提示:答案为网友推荐,仅供参考
相似回答