亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
色婷婷精品大在线视频| 久久久五月婷婷| 日韩欧美成人一区| 国产精品欧美经典| 激情六月婷婷久久| 欧美日韩精品高清| 亚洲欧美日韩小说| 丁香婷婷综合网| 91精品国产一区二区人妖| 成人免费在线视频| 粗大黑人巨茎大战欧美成人| 8v天堂国产在线一区二区| 亚洲人吸女人奶水| 成人动漫中文字幕| 精品国产精品网麻豆系列| 亚洲综合视频网| 99久久精品99国产精品| 国产日本亚洲高清| 日本怡春院一区二区| 欧美色倩网站大全免费| 亚洲精品自拍动漫在线| 99久久精品情趣| 亚洲欧洲精品一区二区三区不卡| 国产一区二区在线观看视频| 欧美一区二区视频在线观看| 亚洲va欧美va国产va天堂影院| 99久久国产综合精品女不卡| 中文字幕一区二区三区在线播放| 国产999精品久久| 国产日韩一级二级三级| 高清免费成人av| 国产欧美精品一区二区三区四区| 韩国视频一区二区| 精品久久国产老人久久综合| 日韩国产欧美在线视频| 日韩午夜激情免费电影| 免费人成黄页网站在线一区二区| 69堂精品视频| 日本亚洲视频在线| 欧美一区二区三区白人| 蜜臀久久99精品久久久久宅男| 91麻豆精品国产综合久久久久久| 日韩专区欧美专区| 欧美区一区二区三区| 日韩av成人高清| 精品国产乱码久久| 成人丝袜高跟foot| 亚洲美女电影在线| 4438亚洲最大| 国产一区视频在线看| 中文字幕不卡三区| 欧美图区在线视频| 美国欧美日韩国产在线播放| 久久精品视频网| 一本久道久久综合中文字幕 | 久久国产精品露脸对白| 国产亚洲短视频| 在线观看网站黄不卡| 毛片av一区二区三区| ...av二区三区久久精品| 欧美色图12p| 国产精品一区在线| 一区二区视频在线看| 日韩欧美国产一区在线观看| 国产成人午夜视频| 午夜精品久久久久久| 国产亚洲人成网站| 在线免费观看日韩欧美| 韩国一区二区三区| 亚洲国产中文字幕在线视频综合| 日韩美女视频在线| 91免费在线播放| 免费成人美女在线观看.| 国产精品传媒在线| 精品国产不卡一区二区三区| 一本大道av伊人久久综合| 国产一区久久久| 亚洲高清免费视频| 中文字幕一区二区三区在线不卡| 日韩一区二区三区视频在线| 91极品视觉盛宴| 国产成人啪免费观看软件| 午夜精彩视频在线观看不卡| 国产精品区一区二区三| 精品国产乱码久久久久久免费| 91免费国产在线| 国产成人av一区二区三区在线 | 亚洲国产日韩一级| 国产精品区一区二区三| 精品区一区二区| 欧美区在线观看| 欧美亚洲动漫另类| 色先锋aa成人| 91一区二区在线观看| 国产**成人网毛片九色| 国产在线看一区| 久久国产麻豆精品| 视频在线观看91| 亚洲成人精品影院| 亚洲图片欧美综合| 亚洲午夜三级在线| 亚洲午夜国产一区99re久久| 亚洲视频一区二区在线观看| 久久精品夜色噜噜亚洲aⅴ| 日韩天堂在线观看| 在线不卡一区二区| 欧美精品自拍偷拍| 欧美精品v国产精品v日韩精品| 欧美午夜在线一二页| 欧美亚洲禁片免费| 91福利社在线观看| 欧美日韩不卡视频| 69堂精品视频| 精品国产乱码久久久久久牛牛| 精品粉嫩超白一线天av| 欧美xxx久久| 久久综合色婷婷| 久久久久久毛片| 国产精品无圣光一区二区| 国产精品久久久久久久午夜片| 国产精品免费看片| 亚洲欧美电影院| 亚洲午夜在线视频| 麻豆精品精品国产自在97香蕉| 老司机免费视频一区二区| 国产麻豆午夜三级精品| 高清日韩电视剧大全免费| 91免费视频网| 欧美一区二区三区性视频| 精品国产成人在线影院| 中文字幕一区二区三区在线播放 | 亚洲卡通欧美制服中文| 亚洲精品国产无天堂网2021| 亚洲国产精品视频| 免费久久99精品国产| 韩国精品在线观看| 99精品国产视频| 欧美日韩国产综合一区二区| 欧美一二三四在线| 国产精品色婷婷| 天天操天天综合网| 国产传媒久久文化传媒| 日本电影欧美片| 欧美mv日韩mv国产网站| 国产精品成人免费在线| 五月婷婷激情综合网| 国产精品亚洲午夜一区二区三区 | 亚洲综合一区二区| 日韩电影在线免费观看| 国产成人av一区二区三区在线| 欧美在线观看视频一区二区| 精品国产乱码久久久久久老虎| 亚洲美女电影在线| 国内精品伊人久久久久av一坑| bt欧美亚洲午夜电影天堂| 欧美喷潮久久久xxxxx| 国产欧美视频一区二区| 午夜精品一区在线观看| 国产a精品视频| 日韩精品一区二区三区swag| 亚洲欧洲三级电影| 激情六月婷婷久久| 欧美日韩国产片| 中文字幕一区二区三区在线播放| 青草av.久久免费一区| 一本久久a久久免费精品不卡| 久久久不卡影院| 日韩成人免费在线| 日本精品裸体写真集在线观看| 久久先锋资源网| 奇米777欧美一区二区| 色悠久久久久综合欧美99| 久久久久久97三级| 美日韩一级片在线观看| 欧美色图在线观看| 自拍偷拍亚洲激情| 成人午夜电影网站| 精品国产免费视频| 麻豆精品一区二区三区| 欧美午夜精品久久久久久超碰| 国产精品久线观看视频| 国产精品一区免费视频| 日韩情涩欧美日韩视频| 亚洲1区2区3区视频| 欧美最猛黑人xxxxx猛交| 亚洲欧洲av一区二区三区久久| 国产成人精品免费在线| 日韩女同互慰一区二区| 亚洲成人动漫一区| 欧美精品日韩精品| 亚州成人在线电影| 欧美在线制服丝袜| 亚洲综合免费观看高清完整版在线| 成人黄色小视频| 亚洲欧洲另类国产综合| 99精品欧美一区| 中文字幕中文字幕一区二区| 菠萝蜜视频在线观看一区| 国产欧美一区二区精品忘忧草| 韩国v欧美v亚洲v日本v|