为啥将宏参数放在括号中会导致错误? [关闭]
Posted
技术标签:
【中文标题】为啥将宏参数放在括号中会导致错误? [关闭]【英文标题】:Why putting a macros argument in parentheses leads to an error? [closed]为什么将宏参数放在括号中会导致错误? [关闭] 【发布时间】:2018-07-24 16:23:40 【问题描述】:我有一个关于 c++ 中预处理器指令的非常有趣的问题。
考虑以下宏及其用法:
#define FUNCTION(a, b) void (a)(int ¤t, int candidate)\
\
if ((current b candidate) == false)\ // Marked Line
current = candidate;\
\
FUNCTION(minimum, <)
FUNCTION(maximum, >)
我的问题是为什么用以下代码行更改“标记线”甚至无法编译:
... if ((current (b) candidate) == false) ...
【问题讨论】:
因为(<)
无效。不使用宏试试。
您的错误与宏无关。 See for yourself.
不显示有效的代码,而是显示无效的代码。
为什么不直接使用仿函数,比如 std::greater 或 std::less?
你最好用模板来做
【参考方案1】:
因为 '
bool LessThan( int a, int b )
return( a (<) b );
至少你应该看到“expected an expression”或类似的错误。
【讨论】:
好的。我明白了,但是将宏参数放在括号中是什么意思? 见this question/answer 通常人们建议您将参数放在括号中,因为宏预处理器会执行非常简单的文字替换,这可能会导致错误的代码。当宏参数是运算符而不是表达式时,建议会失效。 谢谢你,蒂姆。感谢您的帮助!以上是关于为啥将宏参数放在括号中会导致错误? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript - 为啥包含括号会导致三元表达式错误?
为啥 getFragmentManager 会导致 Incompatible Type 错误? [关闭]