在宏中使用`else`

q09*_*987 6 c++ macros

我看过以下代码:

#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 
Run Code Online (Sandbox Code Playgroud)

这就是我们想要使用它的方式.

void testingMacros1 (){
   double x =0.0;
   QL_REQUIRE (x!=0 ," Zero number !");
}
Run Code Online (Sandbox Code Playgroud)

我假设else最后有一些特殊的用法.

问题> else在此宏定义的末尾附加了什么用法?

谢谢

chr*_*ris 10

宏检查条件.它需要条件true,否则它将抛出异常.如果这是真的,你就像普通的if陈述一样把括号放在后面.

你会这样使用它:

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

条件中的宏潜艇,如果失败,它将打印给定的消息.如果它没有失败,你的大括号或一行代表形成else语句.在查看整个事情时,逻辑有点逆转.当使用它时,它就像一个if,但是当它进入时,它ifelse那种相反的角色.

这有点像说:

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