获取宏中函数的返回类型(C++)
我有
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;
-编译器对空函数显示错误(我没有针对复杂返回类型尝试),IFreturn;
-对非空函数显示错误。
(更新...)
我将在这里回答ewindle、nya lathotep和jdv-Jan de Vaan。我使用标准assert
进行调试配置。但在Beta测试后,我仍然会收到最终客户的崩溃报告,在大多数情况下,我需要更改我的崩溃函数:
ASSERT (_some_condition_);
if (!_some_condition_) // add this return
return _default_value_;
我知道,我的程序可能会稍后崩溃(否则它肯定会在当前函数中崩溃)。此外,我不能退出应用程序,因为开发是为iPhone开发的(应用程序可能不会以编程方式退出)。因此,最简单的方法是在断言失败时"自动返回"。
解决方案
您不能确定宏中周围函数的返回类型;宏是由预处理器展开的,它没有关于这些宏发生的环境的这种信息;它基本上只是"搜索和替换"宏。您必须为每种返回类型编写单独的宏。
但为什么不退出程序(即调用exit
函数)?仅仅从函数返回似乎不是一个非常健壮的错误处理。毕竟,失败的断言应该仅在出现严重错误时才会发生(意味着程序处于设计不能处理的状态),因此最好退出program as soon as possible。
相关文章