我有ASSERT(x)
宏,如果它声明(在发布配置中),我想调用return
。 为此,我需要知道返回类型的功能,我使用这个ASSERT
。如何得到它(我处理C++03
,LLVM GCC 4.2
编译器)?在宏(C++)中获取函数的返回类型
我断言宏:
#define ASSERT(x) \
if(!(x)) {
LOG ("ASSERT in %s: %d", __FILE__, __LINE__); \
return /*return_type()*/; \
}
PS:我试过return 0;
- 编译器显示错误无效功能(我没有尝试,对于复杂的返回类型),如果return;
- 错误非空函数。
(更新中...)
我会回答werewindle,奈亚拉托提普和JDV-简·德·梵这里。我使用标准assert
进行调试配置。但是beta测试后,我仍然可以从最终客户的崩溃报告,并且在大多数情况下,我需要改变我崩溃的功能:
ASSERT (_some_condition_);
if (!_some_condition_) // add this return
return _default_value_;
我明白了,我的程序可以大概后崩溃(否则它肯定会崩溃当前功能)。此外,我无法退出应用程序,因为开发是针对iPhone的(应用程序可能不会以编程方式退出)。所以最简单的方法是在断言失败时“自动返回”。
当他们说,应用程序不能只退出程序,但并不意味着你应该保持,无论你的程序有什么错误运行。他们的意思是说**你的应用程序在提交之前应该没有错误**! – 2011-12-29 12:44:01
iPhone - 不是Objective-C而不是C++? – codeling 2011-12-29 12:48:45
你有没有想过使用异常?看起来你可能有一个非常高级别的try-catch块,然后记录你可以合并到你的异常对象中的消息(以及__FILE__和__LINE__给出的位置)。你似乎没有对回报价值感兴趣,对吗? – Andre 2011-12-29 19:11:29