亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? exception.h

?? These libraries are designed for use with Microsoft Visual C++ version 6.0. Install them by running
?? H
字號:
/*
 * File: exception.h
 * Version: 1.0
 * Last modified on Thu Feb 23 12:45:01 1995 by eroberts
 * -----------------------------------------------------
 * The exception package provides a general exception
 * handling mechanism for use with C that is portable
 * across a variety of compilers and operating systems.
 */

#ifdef __cplusplus
#pragma message ( "You are compiling in C++ mode which will probably cause compile errors with" )
#pragma message ( "the 'bool' type as well as link errors such as 'undefined external symbol'." )
#pragma message ( "Most likely, you have saved your source code with a name ending in .cpp;" )
#pragma message ( "it needs to end in .c." )
#endif

#ifndef _exception_h
#define _exception_h

/*
 * Overview:
 * --------
 * The exception package makes it possible for clients to
 * specify a handler for an exceptional conditions in a
 * syntactically readable way.  As a client, your first step
 * is to declare an exception condition name by declaring
 * a variable of type exception, as in
 *
 *       exception MyException;
 *
 * Normal visibility rules apply, so that you should declare
 * the exception variable at the appropriate level.  For
 * example, if an exception is local to an implementation,
 * it should be declared statically within that module.  If
 * an exception condition is shared by many modules, the
 * exception variable should be declared in an interface
 * and exported to all clients that need it.  This package
 * defines and exports the exception ErrorException, which
 * is likely to be sufficient for many clients.
 *
 * The basic functionality of exceptions is that one piece
 * of code can "raise" an exception so that it can then be
 * "handled" by special code in a dynamically enclosing
 * section of the program.  Exceptions are raised by calling
 * the pseudo-function raise with the exception name, as in
 *
 *     raise(MyException);
 *
 * Exceptions are handled using the "try" statement
 * (actually implemented using macros), which has the form:
 *
 *     try {
 *        . . . statements in the body of the block . . .
 *     except(exception1)
 *        . . . statements to handle exception 1 . . .
 *     except(exception2)
 *        . . . statements to handle exception 2 . . .
 *     except(ANY)
 *        . . . statements to handle any exception . . .
 *     } endtry
 *
 * Any number of except clauses may appear (up to a
 * maximum defined by the constant MaxExceptionsPerScope),
 * and the ANY clause is optional.
 *
 * When the program encounters the "try" statement, the
 * statements in the body are executed.  If no exception
 * conditions are raised during that execution, either
 * in this block or by a function call nested inside
 * this block, control passes to the end of the "try"
 * statement when the last statement in the block is
 * executed.  If an exception is raised during the
 * dynamic execution of the block, control immediately
 * passes to the statements in the appropriate except
 * clause.  Only the statements in that clause are
 * executed; no break statement is required to exit
 * the block.  If no handler for the raised exception
 * appears anywhere in the control history, the program
 * exits with an error.
 *
 * Examples of use:
 *
 * 1.  Catching errors.
 *
 * The following code fragment traps calls to Error, so
 * that the program does not quit but instead returns
 * to the top-level read-and-execute loop.
 *
 *     while (TRUE) {
 *         try {
 *             printf("> ");
 *             cmd = ReadCommand();
 *             ExecuteCommand(cmd);
 *         except(ErrorException)
 *             printf("Error: %s\n", (string) GetExceptionValue());
 *             -- additional handling code, if any --
 *         } endtry
 *     }
 *
 * If either ReadCommand or ExecuteCommand calls Error,
 * control will be passed back to the main loop, after
 * executing any additional handler code.  The error
 * message is passed as the exception value and can be
 * printed as shown in the example.
 *
 * 2.  Handling control-C
 *
 * The following code extends the example above so that
 * typing ^C also returns to top-level.
 *
 *     #include <signal.h>
 *
 *     static exception ControlCException;
 *     static int errorCount = 0;
 *     static int ControlCHandler();
 *
 *     main()
 *     {
 *         string cmd;
 *
 *         signal(SIGINT, ControlCHandler);
 *         while (TRUE) {
 *             try {
 *                 printf("> ");
 *                 cmd = ReadCommand();
 *                 ExecuteCommand(cmd);
 *             except(ControlCException);
 *                 printf("^C\n");
 *                 signal(SIGINT, ControlCHandler);
 *             except(ErrorException)
 *                 errorCount++;
 *             } endtry
 *         }
 *     }
 *
 *     static int ControlCHandler()
 *     {
 *         raise(ControlCException);
 *     }
 */

/*
 * Actual interface specification
 * ------------------------------
 * Most of the implementation of the exception mechanism is
 * actually done in the macros defined by this file.
 * Clients should ordinarily be able to read the description
 * above and ignore the detailed code below.
 */

#include <setjmp.h>
#include <string.h>
#include "genlib.h"

/* Define parameters and error status indicators */

#define MaxExceptionsPerScope 10
#define ETooManyExceptClauses 101
#define EUnhandledException 102

/* Codes to keep track of the state of the try handler */

#define ES_Initialize 0
#define ES_EvalBody 1
#define ES_Exception 2

/*
 * Type: exception
 * ---------------
 * Exceptions are specified by their address, so that the
 * actual structure does not matter.  Strings are used here
 * so that exporters of exceptions can store the exception
 * name for the use of debuggers and other tools.
 */

typedef struct { string name; } exception;

/*
 * Type: context_block
 * -------------------
 * This structure is used internally to maintain a chain of
 * exception scopes on the control stack.
 */

typedef struct ctx_block {
    jmp_buf jmp;
    int nx;
    exception *array[MaxExceptionsPerScope];
    exception *id;
    void *value;
    string name;
    struct ctx_block *link;
} context_block;

/* Declare the built-in exceptions */

extern exception ErrorException;
extern exception ANY;

/* Declare a global pointer to the context stack */

extern context_block *exceptionStack;

/*
 * Function: RaiseException
 * Usage: RaiseException(&e, name, value);
 * ---------------------------------------
 * This function is called by the raise macro and does the
 * work necessary to raise the exception.  See the exception.c file
 * for details.  Clients do not ordinarily call this directly.
 */

void RaiseException(exception *e, string name, void *value);

/*
 * Function: HandlerExists
 * Usage: if (HandlerExists(&e)) ...
 * ---------------------------------
 * Determines whether a handler exists for an exception in
 * the dynamically enclosing scope.  Intended only for use
 * by special clients, such as the Error package.
 */

bool HandlerExists(exception *e);

/* Define the pseudo-functions for raise and try */

#define raise(e) RaiseException(&e, #e, NULL)

#define try \
      { \
          jmp_buf _jmp_; \
          context_block _ctx_; \
          volatile int _es_; \
          _es_ = ES_Initialize; \
          _ctx_.nx = 0; \
          _ctx_.link = exceptionStack; \
          exceptionStack = (context_block *) &_ctx_; \
          if (setjmp(_jmp_) != 0) _es_ = ES_Exception; \
          memcpy((void *) _ctx_.jmp, (void *) _jmp_, sizeof(jmp_buf)); \
          while (1) { \
              if (_es_ == ES_EvalBody)

#define except(e) \
                  if (_es_ == ES_EvalBody) exceptionStack = _ctx_.link; \
                  break; \
              } \
              if (_es_ == ES_Initialize) { \
                  if (_ctx_.nx >= MaxExceptionsPerScope) \
                      exit(ETooManyExceptClauses); \
                  _ctx_.array[_ctx_.nx++] = &e; \
              } else if (_ctx_.id == &e || &e == &ANY) { \
                  exceptionStack = _ctx_.link;

#define endtry \
              if (_es_ != ES_Initialize) break; \
              _es_ = ES_EvalBody; \
          } \
      }

#define GetExceptionName() _ctx_.name
#define GetExceptionValue() _ctx_.value
#define GetCurrentException() _ctx_.id

#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
宅男噜噜噜66一区二区66| 欧美精品自拍偷拍动漫精品| 无码av中文一区二区三区桃花岛| 国产精品成人在线观看| 中文字幕乱码久久午夜不卡| 国产视频视频一区| 国产欧美一区二区精品忘忧草| 久久久久久久久久久99999| 久久久午夜精品| 国产女人18水真多18精品一级做| 欧美精品一区二区三区很污很色的| 精品少妇一区二区| 国产日产欧产精品推荐色| 中文乱码免费一区二区| 椎名由奈av一区二区三区| 亚洲欧美福利一区二区| 亚洲香肠在线观看| 奇米一区二区三区| 国产做a爰片久久毛片| 成人精品国产一区二区4080| 97久久精品人人做人人爽| 欧美图片一区二区三区| 91精品国产色综合久久不卡蜜臀| 日韩午夜小视频| 国产精品无码永久免费888| 国产欧美精品区一区二区三区| 欧美国产日韩在线观看| 亚洲一区二区在线播放相泽| 免费久久精品视频| 粉嫩av一区二区三区粉嫩| 色综合久久九月婷婷色综合| 91精品国产色综合久久不卡电影 | 亚洲激情五月婷婷| 青草国产精品久久久久久| 国产一区二区三区在线观看免费视频 | 亚洲女人小视频在线观看| 午夜国产不卡在线观看视频| 蜜桃视频在线观看一区| 99在线视频精品| 欧美一区日本一区韩国一区| 国产精品家庭影院| 免费视频一区二区| 成人app网站| 精品国产一二三| 一区二区三区在线观看欧美| 老司机一区二区| 色综合久久天天综合网| 日韩精品中文字幕一区二区三区| 亚洲欧美日韩成人高清在线一区| 日本不卡视频在线观看| 91搞黄在线观看| 国产欧美一区二区精品性色超碰 | 在线亚洲一区二区| 久久精品人人做人人综合 | 日韩精品一区在线观看| 最新国产の精品合集bt伙计| 国产尤物一区二区在线| 制服丝袜亚洲精品中文字幕| 成人免费在线视频观看| 国产·精品毛片| 欧美电影免费观看完整版| 亚洲综合视频网| 成人国产精品视频| 26uuu成人网一区二区三区| 午夜精品久久久久久久久| av不卡免费在线观看| 精品国产乱子伦一区| 免费一区二区视频| 日韩欧美国产精品一区| 奇米影视7777精品一区二区| 精品视频一区二区三区免费| 亚洲女性喷水在线观看一区| www久久精品| 国产精品传媒视频| 国产精品一区二区无线| 精品入口麻豆88视频| 亚洲一级片在线观看| 91麻豆精东视频| 亚洲欧美一区二区不卡| 色综合久久88色综合天天6| 日韩理论片在线| 欧美在线三级电影| 亚洲午夜免费电影| 欧美日韩一区二区三区四区 | 一本到不卡免费一区二区| 亚洲日本在线观看| 欧美性xxxxx极品少妇| 亚洲国产成人va在线观看天堂| 欧美日韩在线一区二区| 美女视频免费一区| 国产亚洲一区二区三区| 成人av手机在线观看| 亚洲最大成人网4388xx| 欧美一区二区精美| 国产1区2区3区精品美女| 亚洲丝袜制服诱惑| 538prom精品视频线放| 九九国产精品视频| 国产精品久久久久久久午夜片| 色美美综合视频| 免费一级欧美片在线观看| 国产色婷婷亚洲99精品小说| 99久久精品国产网站| 手机精品视频在线观看| 精品国产在天天线2019| 91小视频免费观看| 蓝色福利精品导航| 亚洲丝袜精品丝袜在线| 日韩视频永久免费| fc2成人免费人成在线观看播放 | 91小视频免费观看| 日本特黄久久久高潮| 欧美国产精品v| 欧美一区二区视频网站| av在线一区二区| 免费在线一区观看| 最新中文字幕一区二区三区| 这里只有精品电影| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 欧美丰满少妇xxxbbb| 国产成人亚洲综合a∨婷婷 | 日韩亚洲欧美高清| 91黄色激情网站| 大美女一区二区三区| 奇米在线7777在线精品| 一区2区3区在线看| 国产精品你懂的| 欧美精品一区在线观看| 欧美日韩在线播放一区| av在线一区二区三区| 国产精品一二三在| 激情国产一区二区| 免费人成精品欧美精品| 亚洲国产精品尤物yw在线观看| 欧美激情综合网| 久久综合九色综合欧美就去吻 | 精品在线观看视频| 性做久久久久久免费观看| 亚洲男人天堂一区| 中文子幕无线码一区tr| 2023国产精品视频| 精品久久久久久无| 7777精品伊人久久久大香线蕉完整版 | 国产精品99久久久久久久女警| 免费成人在线视频观看| 亚洲国产欧美在线| 亚洲电影第三页| 午夜精品成人在线视频| 亚洲综合精品久久| 夜夜精品浪潮av一区二区三区| 亚洲人成影院在线观看| 国产精品二三区| 亚洲精品视频在线观看网站| 中文在线免费一区三区高中清不卡| 国产日韩视频一区二区三区| 久久精品夜色噜噜亚洲aⅴ| 国产日产欧产精品推荐色| 国产农村妇女精品| 亚洲视频电影在线| 一区二区三区日韩欧美精品| 一区二区三国产精华液| 石原莉奈一区二区三区在线观看| 日韩成人av影视| 韩国三级中文字幕hd久久精品| 国产精品一区二区在线观看不卡| 国产一区二区三区美女| 成人av网站在线| 欧美色偷偷大香| 日韩丝袜情趣美女图片| 久久理论电影网| 亚洲三级在线免费观看| 亚洲va国产天堂va久久en| 免费成人你懂的| 成人99免费视频| 欧美日韩亚洲丝袜制服| 欧美v日韩v国产v| 国产精品久久久一本精品| 尤物av一区二区| 精品一区二区在线视频| 成人免费看片app下载| 在线免费观看日韩欧美| 日韩免费成人网| 中文字幕亚洲区| 美腿丝袜亚洲一区| 成人高清视频免费观看| 欧美日韩一区二区在线观看 | hitomi一区二区三区精品| 欧美午夜精品免费| 久久久久久久久久久99999| 亚洲日本丝袜连裤袜办公室| 日本午夜一本久久久综合| 丁香婷婷深情五月亚洲| 欧美精品99久久久**| 亚洲国产精品激情在线观看| 亚洲国产wwwccc36天堂| 国产成人精品三级| 欧美一区二区三区在| 中文字幕一区二区视频| 美日韩黄色大片| 欧美体内she精高潮|