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、

  • 相关阅读:
    生产者消费者问题--进阶
    互斥量和信号量的区别
    linux多线程大神博客网址
    生产者消费者
    文件互斥
    Linux中link,unlink,close,fclose详解
    条件变量
    哲学家进餐问题-3中解决方案
    使用读写锁解决读者-写者问题
    架构漫谈(三):如何做好架构之识别问题
  • 原文地址:https://www.cnblogs.com/cppskill/p/5526768.html
Copyright © 2011-2022 走看看