首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

关于宏函数的参数类型问题

在c语言中有一种东西叫做宏,宏这个东西做为预处理cpp的一部分,这里主要关注的宏可以定义一个”函数”,这里常用定义方法如:

可以看到这里定义了一个MAX方法,该方法用于求出两个输入量的最大值。

程序编译及运行时都没有任何错误,业务运算结果也是正常的。

但是这里对于c语言初学者来说会有一些疑问,方法或者说是函数其不是有返回值吗?有返回值就有返回值类型,就算没有返回值,那么默认返回类型也是void,还有形参不是都有类型的吗?可是这里为什么就没有类型呢?

其实这种种原因只需要理解一句话:

宏替换只作替换,不做计算,不做表达式求解。

也就是说我们错误的认为这里MAX是函数,其实这只是类似一个函数。

这里要重点理解这个替换,也就是说这里语句:

printf("Max between 20 and 10 is %d\n", MAX(10, 20));

你可以这样理解:

printf("Max between 20 and 10 is %d\n", 10>20 ? 10:20);

就是说是直接把MAX(x,y)后面的语句给复制并替换到这个printf中,对应x和y用对应的10和20给替换,仅此而已,并非执行了一个MAX方法的结果之后给这个printf。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20211007A09WYP00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券