【发布时间】:2012-01-29 19:19:16
【问题描述】:
我有ASSERT(x) 宏,如果它断言(在发布配置中),我想调用return。
为此,我需要知道我在其中使用ASSERT 的函数的返回类型。如何获取(我处理C++03、LLVM GCC 4.2编译器)?
我的 ASSERT 宏:
#define ASSERT(x) \
if(!(x)) {
LOG ("ASSERT in %s: %d", __FILE__, __LINE__); \
return /*return_type()*/; \
}
PS:我试过 return 0; - 编译器显示 void 函数错误(我没有尝试复杂返回类型),如果 return; - 非 void 函数错误。
(已更新...)
我会在这里回答 werewindle、nyarlathotep 和 jdv-Jan de Vaan。我使用标准assert 进行调试配置。但经过 beta 测试后,我仍然会收到最终客户的崩溃报告,而且在大多数情况下,我需要更改我的崩溃函数:
ASSERT (_some_condition_);
if (!_some_condition_) // add this return
return _default_value_;
我明白,我的程序可能稍后会崩溃(否则它肯定会在当前函数中崩溃)。我也不能退出应用程序,因为开发是为 iPhone 开发的(应用程序可能不会在那里以编程方式退出)。所以最简单的方法是在断言失败时“自动返回”。
【问题讨论】:
-
当他们说应用程序不能以编程方式退出时,他们并不意味着无论您的程序有什么错误,您都应该继续运行。他们的意思是说您的应用在提交之前应该没有错误!
-
iPhone - 那不是 Objective-C 而不是 C++?
-
你有没有想过使用异常?似乎您可以有一个非常高级的 try-catch 块,然后记录您可以合并到异常对象中的消息(以及
__FILE__和__LINE__给出的位置)。您似乎对返回值根本不感兴趣,是吗?