`的使用在宏else`(usage of `else` in macros)

2019-09-17 11:28发布

我看到了下面的代码:

#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在此宏定义的末尾附加?

谢谢

Answer 1:

宏检查条件。 它需要的条件是true ,否则会抛出异常。 如果这是真的,你就会把括号后像一个正常的if声明。

你会使用这样的:

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

在条件宏潜艇,如果失败,就会打印出给定的消息。 如果没有失败,你的括号或一个班轮形成else语句。 看着整个事情时,逻辑只是有点颠倒。 当使用它,它就像一个if ,但在底层的时候吧, ifelse种类的得到逆转作用。

这有点像这样说:

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


文章来源: usage of `else` in macros
标签: c++ macros