6

我看过以下代码:

#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最终有一些特殊用途。

Question>else这个宏定义末尾的 appended 有什么用?

谢谢

4

1 回答 1

10

宏检查条件。它需要条件是true,否则它会抛出异常。如果它是真的,你会像正常的if陈述一样在后面加上大括号。

你会这样使用它:

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

宏 subs 在条件中,如果失败,它将打印给定的消息。如果它没有失败,您的大括号或单行代码将形成 else 语句。从整体来看,逻辑有点颠倒。使用它时,它就像一个if,但是当将它放入时,if和 之else类的角色会颠倒过来。

这有点像这样说:

assert (x != 0 && "x must not be 0");
y = 100 / x; //dividing by 0 is bad
于 2012-05-24T20:01:14.110 回答