获取宏中函数的返回类型(C++) [英] Get return type of function in macro (C++)
本文介绍了获取宏中函数的返回类型(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。
这篇关于获取宏中函数的返回类型(C++)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文