宏C ++ #define示例(obje)(:: f(s,(obje),arg1,arg2,arg3))

Dev*_*Dev 3 c++ macros

我在C ++中有这个特殊的宏功能:

你能给我解释一下它是如何工作的:

#define EXAMPLE(obje) (::f(s, (obje), arg1, arg2, arg3))
Run Code Online (Sandbox Code Playgroud)

我有几个问题:

1)是什么::f意思?编译器在哪里搜索函数f?

2)是什么(obje)意思?为什么在括号之间?

Ric*_*ten 7

::f(...)-调用ffuncion仅搜索全局范围(避免自变量依赖查找)。(假设f是一个函数)。

(obje)- obje带有圆括号。取决于是什么obje。避免obje宏扩展时产生奇怪影响的典型宏技巧。

  • 一个“奇怪效果”的例子将是有帮助的。我的示例:`EXAMPLE(1,2)`。 (3认同)
  • @Evg在这种特殊情况下,我不确定是否有一个(除非扩展时的`obje`可以包含`,`运算符)。当将宏参数扩展到表达式的中间并且宏参数本身就是一个表达式时,通常会发生宏扩展问题。然后,您会遇到操作员优先级出现问题的情况。刚看到您的更新评论。 (3认同)