• 《OOC》笔记(2)——C语言实现trycatchfinally


    本篇就偷个懒吧,实在打不起精神。

     1 #ifndef _TRY_THROW_CATCH_H_
     2 #define _TRY_THROW_CATCH_H_
     3 
     4 #include <stdio.h>
     5 #include <setjmp.h>
     6 
     7 /* For the full documentation and explanation of the code below, please refer to
     8  * http://www.di.unipi.it/~nids/docs/longjump_try_trow_catch.html
     9  */
    10 
    11 #define TRY do{ jmp_buf ex_buf__; switch( setjmp(ex_buf__) ){ case 0: while(1){
    12 #define CATCH(x) break; case x:
    13 #define FINALLY break; } default:
    14 #define ETRY } }while(0)
    15 #define THROW(x) longjmp(ex_buf__, x)
    16 
    17 #endif /*!_TRY_THROW_CATCH_H_*/

    此代码的出处在这里(http://www.di.unipi.it/~nids/docs/longjump_try_trow_catch.html

    原文的意思,我感兴趣的有如下几点。

    1. 这个try catch宏只是一个demo。实际可用的异常机制需要有运行时(Runtime)的支持。也就是说单纯的C语言是不能提供像C#、Java那样的异常捕获机制的。

    2. 这个demo使用了setjmp.h里的setjmp(jmp_buf);和longjmp(jmp_buf, int);两个函数。这两个函数很特别。setjmp将当时的CPU状态存入jmp_buf,longjmp将jmp_buf中的内容恢复到CPU。

  • 相关阅读:
    手把手教你学Git
    服务器上Mysql的安装与配置
    python 5
    python 4
    python 3
    python 2
    区分命令行模式和Python交互模式
    CUDA编程模型之内存管理
    多目标优化算法-NSGA2
    C# ListView 如何添加列标头
  • 原文地址:https://www.cnblogs.com/bitzhuwei/p/OOC-2-try-catch-finally-in-c.html
Copyright © 2020-2023  润新知