zoukankan      html  css  js  c++  java
  • C++异常处理

    1、缺点(网上查到的):

      在release下,如果在try语句块中(包括调用的函数)没有throw语句,则,整个try catch会被编译器给优化掉,不过这是符合C++标准的,因为C++标准说,catch必须能捕获程序中所有通过throw语句抛出的异常;至于内存访问违例,被0除等等系统异常则C++标准并未做要求。

      要解决上面的问题也不难,在编译选项中加入/EHa即可防止编译器优化try语句。

          总的来说,C++的异常处理还是比较依赖于不同的编译器和系统的,不是很稳定,移植性也比较差,Java的异常处理又总觉得不灵泛,让人没有选择,反倒是比较喜欢Python的异常处理机制,嘿嘿。

          windows平台下的异常处理强大的原因在于系统的SEH(结构化异常)处理机制,其实try catch也是使用SEH的变形封装实现的

    2、测试代码

    #include <stdio.h>
    #include <windows.h>
    
    void main()
    {
        try
        {
            DWORD dwDemonObj = 0x0E;
            DWORD dwObjTypeAddr = dwDemonObj+0x8;
            DWORD dwObjType = *(DWORD*)dwObjTypeAddr;
            DWORD dwType = 0x2E;
            if (dwObjType != dwType)
            {
                printf("!=");
            }
            else
            {
                printf("==");
            }
        }
        catch (...)
        {
            printf("catch ...
    ");
        }
        printf("main out
    ");
    }

      ZC: 光键入上面的代码,在VC6中Release版本的exe里面是没有异常处理的。

    3、

    4、

    5、

  • 相关阅读:
    MVC3 缓存应用
    centos下安装tomcat
    VS2010安装完SP1后再安装Silverlight Tools 4遇到的问题解决办法
    TOMCAT多站点配置
    C#.NET 添加图片水印
    装了vs11后运行MVC3程序出问题
    ASP.NET Session的七点认识
    C# 用正则取文本中所有链接
    Long time no blog...
    从程序员到项目经理(二)
  • 原文地址:https://www.cnblogs.com/cppskill/p/5526768.html
Copyright © 2011-2022 走看看