宏重新定义适用于某些编译器,但不适用于其他编译器这是什么决定的?

问题描述

我编写了2个宏,并在一个在线编译器中测试了代码,但是当移至CCS PIC 4.032编译器时,出现“宏定义为递归定义”错误

#define MIN_VALUE_2(a,b)         (((a) < (b)) ? a : b)
#define MIN_VALUE_4(a,b,c,d)   MIN_VALUE_2(MIN_VALUE_2(a,b),MIN_VALUE_2(c,d))

我尝试过的大多数编译器都接受这一点。所以问题是:

  1. 为什么CCS编译器不能使用此功能? (从技术上讲,是预处理器)
  2. 是否需要两个阶段进行更换?这是第一阶段的结果吗?还是预处理器如何工作?

#define MIN_VALUE_4(a,d) (((MIN_VALUE_2(a,b)) < (MIN_VALUE_2(c,d))) ? MIN_VALUE_2(a,b) : MIN_VALUE_2(c,d))

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)