【发布时间】:2015-11-20 14:16:59
【问题描述】:
我正在尝试使用 C 预处理器做一些事情。我有这个宏:
#define _MAX(x, y) (((x)) > ((y))) ? (x) : (y))
#define MAX1 _MAX(1,
#define MAX2 _MAX(2,0))
#define RIGHT _MAX(1,_MAX(2,0))
#define WRONG MAX1 MAX2
在这种情况下,RIGHT 给了我正确的表达式,但 WRONG,即使它相同,也会将宏扩展为空白。
在我看来,这是因为在将 MAX1 扩展为 _MAX(1, 后,它检测到有一个要扩展的 _MAX 宏,并尝试在不扩展 MAX2 的情况下进行扩展,而 MAX2 包含语句的另一半。
如果我是对的,有什么方法可以延迟 _MAX 宏扩展直到 MAX2 扩展?
【问题讨论】:
-
只是在黑暗中刺伤,您是否尝试过在 MAX1 之前定义 MAX2 ?
-
注意:添加双括号并不会使表达式更安全 ;)
-
-
使用 gcc 我得到
error: unterminated argument list invoking macro "_MAX" -
我听说内联函数真的很棒。
标签: c gcc c-preprocessor