Get return type of function in macro (C++)(获取宏中函数的返回类型(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++)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:获取宏中函数的返回类型(C++)
基础教程推荐
猜你喜欢
- 我有静态或动态 boost 库吗? 2021-01-01
- 这个宏可以转换成函数吗? 2022-01-01
- 在 C++ 中计算滚动/移动平均值 2021-01-01
- 常量变量在标题中不起作用 2021-01-01
- 如何通过C程序打开命令提示符Cmd 2022-12-09
- 如何在 C++ 中初始化静态常量成员? 2022-01-01
- 如何将 std::pair 的排序 std::list 转换为 std::map 2022-01-01
- 如何检查GTK+3.0中的小部件类型? 2022-11-30
- C++结构和函数声明。为什么它不能编译? 2022-11-07
- 静态库、静态链接动态库和动态链接动态库的 .lib 文件里面是什么? 2021-01-01
