宏中“else”的用法

usage of `else` in macros

本文关键字:用法 else 宏中      更新时间:2023-10-16

我看到了以下代码:

#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的用法是什么?

谢谢

宏检查条件。它需要条件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