Использование макроса с определенным телом в C ++ - PullRequest
0 голосов
/ 16 февраля 2019

Я изучаю 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 в main имеет тело?

1 Ответ

0 голосов
/ 16 февраля 2019

является foo () обратным вызовом?

foo() является функцией или макросом.

почему макрос мьютекса в main имеетbody?

Возможно, потому что цикл for в DO_MUTEX отсутствует.


Чтобы лучше понять код, попробуйте развернуть макросы вручную.Затем вы получите что-то вроде:

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

Я не знаю, к чему расширяется UNIQUE_COUNTER(), поэтому я предполагаю, что он возвращает ссылку на некоторый тип счетчика или целочисленного типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...