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

C++ C++;函数宏的开始和结束,c++,macros,C++,Macros,我正试图为begin和end函数编写两个简单的宏,以便管理和记录程序中的所有异常。换句话说,我想在所有函数中都有一个try-catch块 在简单的情况下考虑下面的宏。 #define __BEGIN_FUNCTION__ try { #define __END_FUNCTION__ } catch(std::exception e) \ { log << time << ':' << e << endl; } #定义uu开始u函数uu尝试{ #定

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

在简单的情况下考虑下面的宏。

#define __BEGIN_FUNCTION__ try {
#define __END_FUNCTION__ } catch(std::exception e) \
{ log << time << ':' << e << endl; }
#定义uu开始u函数uu尝试{
#定义_uend_u函数_u}捕获(std::exception e)\

{log与其这样做,为什么不让异常冒泡到顶部并在一个地方处理它呢


只有在可以采取措施的情况下才能捕获异常。

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

忽略该异常毫无意义

至少,您应该在记录异常后重新显示异常。更改
END\u函数
宏以包含一个
throw;
。这也应该解决您遇到的编译器错误

最后一点注意:您的宏名称选择得非常糟糕。 下列名称之一:

  • 包含双下划线或
  • 以下划线开头,后跟大写字母
保留供实现(编译器和标准库)使用

使用类似于程序中任何地方的名称可能会产生冲突


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

我知道你不想听,但答案是只在适当的时候包含try/catch块。你在这里试图做的基本上是非常非常懒惰,在某种程度上几乎没有任何好处。更糟糕的是,因为你把所有的东西都当作一个通用异常来捕获,而不把任何异常处理他们似乎应该得到治疗


答案是“不要这样做。”

Eric,你为什么认为,他不想听。建议最好的方法从来没有错。我只是假设他不想听,因为我想他自己可能已经有了这个想法。:)