您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
关于宏函数的参数类型问题
发布时间:2021-04-16 21:39:39编辑:雪饮阅读()
在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。
关键字词:c语言,宏,函数