TRY / CATCH_ALL与try / catch

时间:2010-04-14 21:23:47

标签: c++ exception-handling

我一直在使用c ++,而且我熟悉正常的try / catch。但是,我现在发现自己在Windows上,在VisualStudio中进行COM开发编码。代码的几个部分使用如下内容:

TRY {
    ... do stuff
} CATCH_ALL(e) {
    ... issue a warning
}
END_CATCH_ALL;

这些宏有什么意义?它们对内置的try / catch有什么好处?

我试过谷歌搜索,但“尝试与TRY”很难搜索。

4 个答案:

答案 0 :(得分:7)

这是一个MFC宏:
http://msdn.microsoft.com/en-us/library/t8dwzac0%28VS.71%29.aspx

This page说它们是MFC 1.0中的残余 - 在新代码中使用普通的C ++异常:

  

低于3.0的MFC版本不支持C ++异常机制。 MFC提供了处理异常的宏。

答案 1 :(得分:3)

您需要记住,使用Visual C ++编程时有3种不同的异常:

  1. C ++例外
  2. 结构化异常(SEH,Windows自身的异常机制)
  3. MFC例外(您提及的那些,不建议用于新代码,但仍可用于向后兼容)
  4. SEH和C ++异常机制不应该混合

    MSDN上的这篇文章有更多细节:

    http://msdn.microsoft.com/en-us/library/x057540h.aspx

答案 2 :(得分:1)

这是Windows编程的工件,在编译器没有很好地支持try / catch之前,或根本不受支持。

答案 3 :(得分:0)

这些宏对于早期版本的编译器非常重要。它们仍然支持与遗留代码的兼容性,但不建议使用它们。

Exception Handling in Visual C++的文档说明了MFC异常:

  

从版本3.0开始,MFC使用了C ++异常,但仍然支持它   较旧的异常处理宏,类似于C ++异常   通知。虽然不建议将这些宏用于新的   编程时,它们仍然支持向后兼容性。在   已经使用宏的程序,可以自由使用C ++   也有例外。在预处理期间,宏评估为   Visual C ++实现中定义的异常处理关键字   从Visual C ++版本2.0开始的C ++语言。你可以走了   在开始使用C ++时,现有的异常宏就位了   异常。