使用具有C 的定义身体的宏

Using a macro with a defined body in C++

本文关键字:定义      更新时间:2023-10-16

我正在学习C ,并且遇到了此代码段,无法理解语法:

.
.
#define DO_MUTEX(m, counter) char counter; 
for (counter = 1, lock(m); counter == 1; --counter, unlock(m))
#define mutex(m) DO_MUTEX(m, UNIQUE_COUNTER(m))

int main(){
   mutex(my_mutex) {
    foo();
   }  
   .
   .
   .
}

foo()是回调吗?为什么mutex宏位于主体上?

是foo()回调?

foo()是函数或宏。

为什么MUTEX宏有主体?

可能是因为DO_MUTEX中的for环路没有。


要更好地理解代码,请尝试手动扩展宏。然后,您会得到类似的东西:

int main()
{
    auto &counter = UNIQUE_COUNTER(my_mutex);
    for (counter = 1, lock(my_mutex); counter == 1; --counter, unlock(my_mutex))
    {
        foo();
    }  
   .
   .
   .
}

我不知道UNIQUE_COUNTER()扩展到什么,所以我猜它返回了某种计数器或整数类型的引用。