TRY/CATCH\u ALL vs TRY/CATCH 我已经使用C++了,我熟悉正常的尝试/捕获。然而,我现在发现自己在Windows上,用VisualStudio编写COM开发代码。代码的几个部分使用如下内容: TRY { ... do stuff } CATCH_ALL(e) { ... issue a warning } END_CATCH_ALL;

TRY/CATCH\u ALL vs TRY/CATCH 我已经使用C++了,我熟悉正常的尝试/捕获。然而,我现在发现自己在Windows上,用VisualStudio编写COM开发代码。代码的几个部分使用如下内容: TRY { ... do stuff } CATCH_ALL(e) { ... issue a warning } END_CATCH_ALL;,c++,exception-handling,C++,Exception Handling,这些宏有什么意义?与内置的try/catch相比,它们有什么好处 我试过用谷歌搜索这个,但是“try vs try”很难搜索。这是一个MFC宏: 表示它们是MFC 1的残余-在新代码中使用正常C++异常: 低于3的MFC版本不支持C++异常机制。MFC提供了宏来处理异常 这是以前Windows编程的产物,当时编译器不支持try/catch,或者根本不支持try/catch。您需要记住,使用Visual C++编程时有3种不同的异常: C++异常 结构化异常(SEH,Windows自己的异常机制

这些宏有什么意义?与内置的try/catch相比,它们有什么好处

我试过用谷歌搜索这个,但是“try vs try”很难搜索。

这是一个MFC宏:

表示它们是MFC 1的残余-在新代码中使用正常C++异常:

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


这是以前Windows编程的产物,当时编译器不支持try/catch,或者根本不支持try/catch。

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

  • C++异常
  • 结构化异常(SEH,Windows自己的异常机制)
  • MFC异常(您提到的那些,不建议用于新代码,但仍可以用于向后兼容性)
  • SEH和C++异常机制<强>不应混合< /强> < 这篇关于MSDN的文章有更多细节:


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

    有关MFC例外情况的文档如下所示:

    自从版本3以来,MFC使用了C++异常,但仍然支持它。 较老的异常处理宏,类似于C++异常 在形式上。虽然这些宏不建议用于新的 编程时,它们仍然支持向后兼容性。在里面 已经使用宏的程序,可以自由使用C++ 例外情况也是如此。在预处理过程中,宏的计算结果为 VisualC++实现中定义的异常处理关键字 关于C++语言的Visual C++版本2。你可以走了 在使用C++时,存在现有的异常宏 例外情况


    但是它与使用内置的try/catch相比如何?@Tim:它们的存在只是因为MFC1.0不支持内置的try/catch。所以不要用它们。如果您想了解宏定义的工作原理,请查看宏定义。“不要使用它们”听起来是正确的路径。不过,从商业角度来看(对不起),这是否与微软给出的建议相同?因为他们是MFC的制造商,所以我想有一个官方的推荐给其他人。@提姆:<代码>如果你用MFC写一个新的应用程序,你应该使用C++机制。< /代码>