宏C++#定义示例(对象)(::f(s,(对象),arg1,arg2,arg3)

macro C++ #define EXAMPLE(obje) (::f(s, (obje), arg1, arg2, arg3))

本文关键字:对象 C++# arg1 arg2 arg3 定义      更新时间:2023-10-16

我在C++中有一个特殊的宏函数:

你能向我解释一下这是怎么回事吗:

#define EXAMPLE(obje) (::f(s, (obje), arg1, arg2, arg3))

我有几个问题:

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

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

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

(obje)-obje,四周有括号。这取决于obje是什么。典型的宏技巧是避免obje在扩展宏时产生奇怪的效果。

1(:f是什么意思?

::是作用域解析运算符。CCD_ 12假定是一个标识符。::f是指全局命名空间中的f的完全限定名称。

编译器在哪里搜索函数f?

f在全局命名空间中查找。

2((obje(是什么意思?

obje是类函数宏的一个参数。它将被作为参数传递的文本所替换。

为什么它在括号之间?

宏参数周围的括号确保它在语法上是一个单独的表达式。在许多宏中,参数周围缺少括号可能会导致某些输入出现意外结果。

我不知道这个宏在没有括号的情况下是否会有问题的输入,但传统地使用它们比猜测是否存在问题更安全,而且这种约定通常由样式检查器强制执行。