WEB开发网
开发学院手机开发Symbian 开发 Symbian 断言_ASSERT_DEBUG和_ASSERT_ALWAYS 阅读

Symbian 断言_ASSERT_DEBUG和_ASSERT_ALWAYS

 2010-03-05 05:47:00 来源:WEB开发网   
核心提示:断言:被用来检测代码所作的假设是否正确,如果假设为假,Symbian 断言_ASSERT_DEBUG和_ASSERT_ALWAYS,就停止执行代码,也许还会显示一条消息,针对调用代码的无效输入,使用防御性编码技术(if语句)来保护你的函数,断言并不是产生严重错误,而是允许你指定过程以供断言失败时调用

断言:被用来检测代码所作的假设是否正确,如果假设为假,就停止执行代码,也许还会显示一条消息。

断言并不是产生严重错误,而是允许你指定过程以供断言失败时调用。帮助侦测出无效状态或者是错误的程序逻辑。

当断言失败时,总是应该抛出一个严重错误。

一、_ASSERT_DEBUG

_ASSERT_DEBUG断言可以在开发的早期阶段加入,以强调程序错误,也可以等到维护和重构时加入,以验证代码行为符合“基于契约的设计”。

用例:

void CTestClass::TestValue(TInt aValue)

{

#ifdef _DEBUG

_LIT(KPanicDescriptor,"TestValue");

#endif

_ASSERT_DEBUG((aValue>=0),User::Panic(KPanicDescriptor,KErrArgument));

//如果条件为假,代码将被一个严重错误停止执行(使用Panic)。

...

}

有一个轻量级的,匿名的断言,它会调用隐藏的Panic:

ASSERT(aValue>=0);

二、_ASSERT_ALWAYS

在发布版本中使用,但不多,因为断言会中止代码执行,使库发生严重错误,应尽可能避免。

可以使用if语句来检测输入值,并在出错时返回错误代码。

针对调用代码的无效输入,使用防御性编码技术(if语句)来保护你的函数,_ASSERT_ALWAYS应该被用来保护只有调用者的bug(如数组下标越界)才能造成的非法输入。

Tags:

编辑录入:coldstar [复制链接] [打 印]
赞助商链接