gpt4 book ai didi

C++ 函数宏的开始和结束

转载 作者:太空宇宙 更新时间:2023-11-04 14:34:33 24 4
gpt4 key购买 nike

我正在尝试为函数的开始和结束编写两个简单的宏,以便管理和记录程序中的所有异常。换句话说,我想在我的所有函数中都有一个 try-catch block 。

在简单的情况下,请考虑以下宏。

#define __BEGIN_FUNCTION__ try {
#define __END_FUNCTION__ } catch(std::exception e) \
{ log << time << ':' << e << endl; }

但如果我将这两个宏放在函数的开头和结尾,编译器将给出“并非所有控制路径都返回值”错误。

有什么解决办法吗?

最佳答案

这是一种糟糕的异常处理方式。如果抛出异常,那是因为发生了错误。然后您必须处理错误,解决发生的问题,或者允许它终止程序。

忽略异常是没有意义的。

至少,您应该在记录异常后重新抛出异常。更改 END_FUNCTION 宏以包含 throw;。这也应该可以解决您遇到的编译器错误。

最后一点:您的宏名称选择得非常糟糕。名称:

  • 包含双下划线或
  • 以下划线开头,后跟大写字母

保留供实现(编译器和标准库)使用。

在您的程序中任何地方使用类似的名称会冒冲突的风险。

您还应该注意,捕获异常应该通过引用 (catch (const std::exception& e)) 来完成,并且它不会捕获不是从 std::派生的异常异常。如果你想捕捉所有抛出的东西,使用catch(...)

关于C++ 函数宏的开始和结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3431469/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com