代码之家  ›  专栏  ›  技术社区  ›  Tony Troeff

为什么将宏参数放在括号中会导致错误?[关闭]

  •  -7
  • Tony Troeff  · 技术社区  · 8 年前

    关于C++中的预处理器指令,我有一个非常有趣的问题。

    考虑以下宏及其用法:

        #define FUNCTION(a, b) void (a)(int &current, int candidate)\
        {\
            if ((current b candidate) == false){\      // Marked Line    
                current = candidate;\
            }\
        }
    
        FUNCTION(minimum, <)
        FUNCTION(maximum, >)
    

    我的问题是为什么用以下代码行更改“标记行”甚至无法编译:

         ... if ((current (b) candidate) == false) ...
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   Tim Randall    8 年前

    因为“<”是一个二元运算符,并且如果两边都没有操作数,则无法计算它。只需尝试编译以下代码,就可以在不使用宏的情况下验证这一点:

    bool LessThan( int a, int b )
    {
        return( a (<) b );
    }
    

    至少您应该看到“expected an expression”或类似的错误。