Как использовать «возврат» в качестве макроса в троичной операции? - PullRequest
0 голосов
/ 12 июня 2019

У меня есть код C ++, как показано ниже:

#define xxx return

int main()
{
    xxx 0;
}

Он работает, как и ожидалось.

Теперь я изменяю код следующим образом:

#define xxx return
#define TEST(X) ((X) == (false) ? (xxx 1) : ())

int main()
{
    bool b = false;
    TEST(b);
    return 0;
}

Всловом, я хочу return 1, если b равно false.Но я получаю ошибку:

error: expected primary-expression before ‘return’

Ответы [ 2 ]

5 голосов
/ 12 июня 2019

return - это утверждение, а не выражение.И все три операнда ?: должны быть только выражениями.Ключевое слово return не может появиться ни в одном из них, вне зависимости от макроса.

Макрос, который будет работать в вашем конкретном примере, будет простым

#define TEST(X) if((X) == (false)) xxx 1

Хотя, если вы возитесь с макросами, будьте осторожны с проблемой dangling else и докажите вышеупомянутое против нее.

0 голосов
/ 12 июня 2019

Вы не можете иметь оператор возврата внутри троичного оператора.Вам нужно использовать обычный if.

#define TEST(X) if ((X)  == false) return 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...