использование " else` в макросах

Я видел следующий код:

#define QL_REQUIRE(condition,message) 
if (!(condition)) { 
    std::ostringstream _ql_msg_stream; 
    _ql_msg_stream << message; 
    throw QuantLib::Error(__FILE__,__LINE__, 
                          BOOST_CURRENT_FUNCTION,_ql_msg_stream.str()); 
 } else 

вот как мы предполагаем его использовать.

void testingMacros1 (){
   double x =0.0;
   QL_REQUIRE (x!=0 ," Zero number !");
}

Я полагаю,else в конце концов имеет некоторое специальное использование.

вопрос> Что такое использование else добавлено в конце этого определения макросов?

спасибо

1 ответов


макрос проверяет условие. Это должно быть условие true, иначе он выдаст исключение. Если это правда, вы бы поставили скобки после того, как нормальный if заявление.

вы бы использовали его так:

QL_REQUIRE (x != 0, "x must not be 0")
{
    y = 100 / x; //dividing by 0 is bad
}

макрос subs в условии, и если это не удастся, он будет печатать данное сообщение. Если это не удастся, брекеты или один-лайнер форму после else. Логика просто немного перевернута, когда смотришь на все это. При использовании его, это как if, но когда subbing его,if и else вроде как поменялись ролями.

это как сказать:

assert (x != 0 && "x must not be 0");
y = 100 / x; //dividing by 0 is bad