我见过以下代码:
#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
有一些特殊用法。
问题&GT;在此宏定义的末尾附加else
的用法是什么?
谢谢
答案 0 :(得分:10)
宏检查条件。它需要条件为true
,否则会抛出异常。如果这是真的,你会像普通的if
语句一样把括号括起来。
你会这样使用它:
QL_REQUIRE (x != 0, "x must not be 0")
{
y = 100 / x; //dividing by 0 is bad
}
条件中的宏潜艇,如果失败,它将打印给定的消息。如果它没有失败,你的大括号或一行代表形成else语句。在查看整个事情时,逻辑有点逆转。使用它时,它就像一个if
,但在对它进行修改时,if
和else
类型会产生相反的角色。
有点像这样说:
assert (x != 0 && "x must not be 0");
y = 100 / x; //dividing by 0 is bad