阅读源代码https://github.com/jspahrsummers/libextobjc/blob/master/extobjc/metamacros.h#L158
// expands to true
metamacro_if_eq(0, 0)(true)(false)
当手动展开宏metamacro_if_eq(0,0)时,我得到以下内容
metamacro_if_eq0(0) (true) (false)
继续扩展。
metamacro_if_eq0_0() (true) (false)
继续。
metamacro_consume_ (true) (false)
metamacro_consume is defined as:
#define metamacro_consume_(...) // why nothing here ?
然后我怎样才能得到" true"的预期值。 ?
答案 0 :(得分:1)
您的作品不正确。操作如下:
metamacro_if_eq(0, 0)(true)(false)
metamacro_concat(metamacro_if_eq, 0)(0)(true)(false)
metamacro_concat_(metamacro_if_eq, 0)(0)(true)(false)
metamacro_if_eq0(0)(true)(false)
metamacro_concat(metamacro_if_eq0_, 0)(true)(false)
metamacro_concat_(metamacro_if_eq0_, 0)(true)(false)
// You made a mistake at this point.
metamacro_if_eq0_0(true)(false)
true metamacro_consume_(false)
true
第二轮连接后,true
成为metamacro_if_eq0_0()
的参数。该宏的参数保留在原位。 metamacro_consume_()
接受任何数量的论证,并解决任何问题。