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

时间:2018-07-24 16:23:40

标签: c++ macros preprocessor-directive

关于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 个答案:

答案 0 :(得分:2)

因为'<'是二进制运算符,并且如果没有任何操作数,则不能求值。您只需尝试编译以下代码,即可在不使用宏的情况下进行验证:

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

至少您应该看到“期望的表达式”或类似的错误。