C语言的艺术:强大的宏

本文探讨了C语言中宏的强大功能,不仅介绍了如何使用宏抽象数组长度,还揭示了宏替换可能导致的问题及解决方法。通过实例讲解了#和##运算符的用法,以及如何处理可变数量的参数。文章提醒开发者注意宏的使用需谨慎,以避免潜在的错误和陷阱。
摘要由CSDN通过智能技术生成

这次不讲算法了,讲一讲C语言里面一个很强大的功能:
宏,是一个大家都很熟悉的概念,很多人也经常使用宏,但是用的都不怎么深,我所知道的最常见的用法就是用宏抽象数组长度。

#define N 99
a[N] = {0};

实际上,宏就是简单的替换,编译器在编译程序时,遇到N,会将其替换成99。
那么下面来看这段代码:

#define sqrt(x) x*x
sqrt(5);
sqrt(3+2);

这里就出现了问题,sqrt(5)的结果是25没错,但是sqrt(3+2)的结果错误,为什么呢?注意,前面说过,宏是简单替换sqrt(3+2)替换后变成3+2*3+2,所以结果是11,想要结果正确,需要这样定义宏:

#define sqrt(x) (x)*(x)

这样就没问题了。
当然,宏很强大,还有很多其他的功能。比方说转换字符串,在讲这个知识点前,我想问大家,我们该如何创建一个如:”“”“”“”“”“”“”;全是引号的字符串?很容易可以想到使用转义,但是转义是不是太麻烦了?所以下面介绍一种新方法:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值