获取宏中函数的返回类型(C++)

2022-08-26 00:00:00 function assert types c++
我有ASSERT(x)宏,如果它断言(在发布配置中),我想调用return。 要做到这一点,我需要知道使用ASSERT的函数的返回类型。如何获取(我处理C++03LLVM 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。

相关文章