为什么将宏参数放在括号中会导致错误?
Why putting a macros argument in parentheses leads to an error?
关于 c++ 中的预处理器指令,我有一个非常有趣的问题。
考虑以下宏及其用法:
#define FUNCTION(a, b) void (a)(int ¤t, int candidate)\
{\
if ((current b candidate) == false){\ // Marked Line
current = candidate;\
}\
}
FUNCTION(minimum, <)
FUNCTION(maximum, >)
我的问题是为什么用以下代码行更改 "Marked Line" 甚至无法编译:
... if ((current (b) candidate) == false) ...
因为'<'是一个二元运算符,如果两边都没有操作数,就无法计算它。您可以在没有宏的情况下通过尝试编译以下代码来验证这一点:
bool LessThan( int a, int b )
{
return( a (<) b );
}
至少您应该看到 "expected an expression" 或类似的错误。
关于 c++ 中的预处理器指令,我有一个非常有趣的问题。
考虑以下宏及其用法:
#define FUNCTION(a, b) void (a)(int ¤t, int candidate)\
{\
if ((current b candidate) == false){\ // Marked Line
current = candidate;\
}\
}
FUNCTION(minimum, <)
FUNCTION(maximum, >)
我的问题是为什么用以下代码行更改 "Marked Line" 甚至无法编译:
... if ((current (b) candidate) == false) ...
因为'<'是一个二元运算符,如果两边都没有操作数,就无法计算它。您可以在没有宏的情况下通过尝试编译以下代码来验证这一点:
bool LessThan( int a, int b )
{
return( a (<) b );
}
至少您应该看到 "expected an expression" 或类似的错误。