宏替换

本文详细介绍了宏替换的概念及其在程序中的应用。包括宏定义的基本语法、宏调用的特点、宏定义的优势以及宏定义与变量定义的区别等内容。此外还介绍了带参数的宏定义、宏取消定义、条件宏定义等高级特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

宏替换
#define 名字 替换文本
表示后续程序中所有出现名字的地方全部替换为替换文本
例:
#define max(A,B) ( (A) > (B) ? (A) : (B) )
x=max( p+q , s+t );
此时会被替换为
x=( (p+q) > (s+t) ? (p+q) : (s+t) );
如果对各种类型参数的处理一致,则可以将同一宏定义应用于任何数据类型,无需针对不同的数据类型定义不同的max函数
宏调用不是函数调用,是直接将替换文本插入到代码中
使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改
宏定义不分配内存,变量定义分配内存
宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值)
对于带参数的宏定义(如例子)宏名和参数的括号间不能有空格。

形式参数不能用带引号的字符串替代,但若在替代文本中参数名以#作为前缀,则结果将被扩展为有实际参数替换该参数的带引号字符串
例:
#define dprint(ex) printf( #ex " = %g\n" , ex)
dprint(x);
此时等价于
printf( " x = %g\n" , x )

预处理器运算符##为宏扩展提供一种连接实际参数的手段,若替换文本中的参数与##相邻,则该参数将被实际参数替代,##与前后的空白符将被删除,并对替换后的结果重新扫描。
例:
#define paste(front,back) front##back
paste(a,b)
此时等价于ab

#undef 名字
取消名字的宏定义

#ifdef和#ifndef用于测试某个名字是否已有定义
例:
#ifndef HDR
#define HDR
#endif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值