获取宏中函数的返回类型(C++) [英] Get return type of function in macro (C++)

查看:0
本文介绍了获取宏中函数的返回类型(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;-对非空函数显示错误。

(更新...)

我将在这里回答ewindlenya lathotepjdv-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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆