c预编译 #define相关

本文深入探讨了C预处理器指令,如#define、#error等的应用,并详细分析了如何利用这些指令进行字符串生成、连接操作及错误消息生成。此外,还特别讨论了一个常见的宏定义MIN及其可能带来的副作用。

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

#是生成字符串:
#define a(x) #x
a(bc) => "bc"

##是连接:
#define a(x) abc##x
a(123) => abc123

#error是生成编译错误消息:

#ifdef abc
#error something wrong...
#endif
//如果abc是已经定义的宏,那么编译的时候就会显示错误消息something wrong...
//////////////////////////////////////////////////////////////////////
“标准”宏定义一个MIN 输入两参数输出其中最小的
#define MIN(A,B) ((A)<= (B) ? (A) : (B) )
这种定义会带来一些副作用,看下面的例子:

int x = 1, y = 2;
int main()
{
printf("min=%d\n", min(x++, y++));
printf("x = %d, y = %d\n", x, y);
}

执行完min(x++、y++),我们期望x的值为2,y的值为3。

但是,实际的结果是,执行完mini(x++、y++)后,x的值为3,y的值为3,原因在于宏展开后x++被执行了两次。但暂时没找到其它更好的办法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值