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

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

?? cexcept.h

?? openmeetings組件之GS openmeetings組件之GS openmeetings組件之GS
?? H
字號:
/*===cexcept.h 2.0.0 (2001-Jul-12-Thu)Adam M. Costello <amc@cs.berkeley.edu>An interface for exception-handling in ANSI C (C89 and subsequent ISOstandards), developed jointly with Cosmin Truta <cosmin@cs.toronto.edu>.    Copyright (c) 2001 Adam M. Costello and Cosmin Truta.  Everyone    is hereby granted permission to do whatever they like with this    file, provided that if they modify it they take reasonable steps to    avoid confusing or misleading people about the authors, version,    and terms of use of the derived file.  The copyright holders make    no guarantees regarding this file, and are not responsible for any    damage resulting from its use.Only user-defined exceptions are supported, not "real" exceptions likedivision by zero or memory segmentation violations.If this interface is used by multiple .c files, they shouldn't includethis header file directly.  Instead, create a wrapper header file thatincludes this header file and then invokes the define_exception_typemacro (see below), and let your .c files include that header file.The interface consists of one type, one well-known name, and six macros.define_exception_type(type_name);    This macro is used like an external declaration.  It specifies    the type of object that gets copied from the exception thrower to    the exception catcher.  The type_name can be any type that can be    assigned to, that is, a non-constant arithmetic type, struct, union,    or pointer.  Examples:        define_exception_type(int);        enum exception { out_of_memory, bad_arguments, disk_full };        define_exception_type(enum exception);        struct exception { int code; const char *msg; };        define_exception_type(struct exception);    Because throwing an exception causes the object to be copied (not    just once, but twice), programmers may wish to consider size when    choosing the exception type.struct exception_context;    This type may be used after the define_exception_type() macro has    been invoked.  A struct exception_context must be known to both    the thrower and the catcher.  It is expected that there be one    context for each thread that uses exceptions.  It would certainly    be dangerous for multiple threads to access the same context.    One thread can use multiple contexts, but that is likely to be    confusing and not typically useful.  The application can allocate    this structure in any way it pleases--automatic, static, or dynamic.    The application programmer should pretend not to know the structure    members, which are subject to change.struct exception_context *the_exception_context;    The Try/Catch and Throw statements (described below) implicitly    refer to a context, using the name the_exception_context.  It is    the application's responsibility to make sure that this name yields    the address of a mutable (non-constant) struct exception_context    wherever those statements are used.  Subject to that constraint, the    application may declare a variable of this name anywhere it likes    (inside a function, in a parameter list, or externally), and may    use whatever storage class specifiers (static, extern, etc) or type    qualifiers (const, volatile, etc) it likes.  Examples:        static struct exception_context          * const the_exception_context = &foo;        { struct exception_context *the_exception_context = bar; ... }        int blah(struct exception_context *the_exception_context, ...);        extern struct exception_context the_exception_context[1];    The last example illustrates a trick that avoids creating a pointer    object separate from the structure object.    The name could even be a macro, for example:        struct exception_context ec_array[numthreads];        #define the_exception_context (ec_array + thread_id)    Be aware that the_exception_context is used several times by the    Try/Catch/Throw macros, so it shouldn't be expensive or have side    effects.  The expansion must be a drop-in replacement for an    identifier, so it's safest to put parentheses around it.void init_exception_context(struct exception_context *ec);    For context structures allocated statically (by an external    definition or using the "static" keyword), the implicit    initialization to all zeros is sufficient, but contexts allocated    by other means must be initialized using this macro before they    are used by a Try/Catch statement.  It does no harm to initialize    a context more than once (by using this macro on a statically    allocated context, or using this macro twice on the same context),    but a context must not be re-initialized after it has been used by a    Try/Catch statement.Try statementCatch (expression) statement    The Try/Catch/Throw macros are capitalized in order to avoid    confusion with the C++ keywords, which have subtly different    semantics.    A Try/Catch statement has a syntax similar to an if/else statement,    except that the parenthesized expression goes after the second    keyword rather than the first.  As with if/else, there are two    clauses, each of which may be a simple statement ending with a    semicolon or a brace-enclosed compound statement.  But whereas    the else clause is optional, the Catch clause is required.  The    expression must be a modifiable lvalue (something capable of being    assigned to) of the same type (disregarding type qualifiers) that    was passed to define_exception_type().    If a Throw that uses the same exception context as the Try/Catch is    executed within the Try clause (typically within a function called    by the Try clause), and the exception is not caught by a nested    Try/Catch statement, then a copy of the exception will be assigned    to the expression, and control will jump to the Catch clause.  If no    such Throw is executed, then the assignment is not performed, and    the Catch clause is not executed.    The expression is not evaluated unless and until the exception is    caught, which is significant if it has side effects, for example:        Try foo();        Catch (p[++i].e) { ... }    IMPORTANT: Jumping into or out of a Try clause (for example via    return, break, continue, goto, longjmp) is forbidden--the compiler    will not complain, but bad things will happen at run-time.  Jumping    into or out of a Catch clause is okay, and so is jumping around    inside a Try clause.  In many cases where one is tempted to return    from a Try clause, it will suffice to use Throw, and then return    from the Catch clause.  Another option is to set a flag variable and    use goto to jump to the end of the Try clause, then check the flag    after the Try/Catch statement.    IMPORTANT: The values of any non-volatile automatic variables    changed within the Try clause are undefined after an exception is    caught.  Therefore, variables modified inside the Try block whose    values are needed later outside the Try block must either use static    storage or be declared with the "volatile" type qualifier.Throw expression;    A Throw statement is very much like a return statement, except that    the expression is required.  Whereas return jumps back to the place    where the current function was called, Throw jumps back to the Catch    clause of the innermost enclosing Try clause.  The expression must    be compatible with the type passed to define_exception_type().  The    exception must be caught, otherwise the program may crash.    Slight limitation:  If the expression is a comma-expression it must    be enclosed in parentheses.Try statementCatch_anonymous statement    When the value of the exception is not needed, a Try/Catch statement    can use Catch_anonymous instead of Catch (expression).Everything below this point is for the benefit of the compiler.  Theapplication programmer should pretend not to know any of it, because itis subject to change.===*/#ifndef CEXCEPT_H#define CEXCEPT_H#include <setjmp.h>#define define_exception_type(etype) \struct exception_context { \  jmp_buf *penv; \  int caught; \  volatile struct { etype etmp; } v; \}/* etmp must be volatile because the application might use automatic *//* storage for the_exception_context, and etmp is modified between   *//* the calls to setjmp() and longjmp().  A wrapper struct is used to *//* avoid warnings about a duplicate volatile qualifier in case etype *//* already includes it.                                              */#define init_exception_context(ec) ((void)((ec)->penv = 0))#define Try \  { \    jmp_buf *exception__prev, exception__env; \    exception__prev = the_exception_context->penv; \    the_exception_context->penv = &exception__env; \    if (setjmp(exception__env) == 0) { \      if (&exception__prev)#define exception__catch(action) \      else { } \      the_exception_context->caught = 0; \    } \    else { \      the_exception_context->caught = 1; \    } \    the_exception_context->penv = exception__prev; \  } \  if (!the_exception_context->caught || action) { } \  else#define Catch(e) exception__catch(((e) = the_exception_context->v.etmp, 0))#define Catch_anonymous exception__catch(0)/* Try ends with if(), and Catch begins and ends with else.  This     *//* ensures that the Try/Catch syntax is really the same as the        *//* if/else syntax.                                                    *//*                                                                    *//* We use &exception__prev instead of 1 to appease compilers that     *//* warn about constant expressions inside if().  Most compilers       *//* should still recognize that &exception__prev is never zero and     *//* avoid generating test code.                                        */#define Throw \  for (;; longjmp(*the_exception_context->penv, 1)) \    the_exception_context->v.etmp =#endif /* CEXCEPT_H */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一级xxx| 免费人成精品欧美精品| 午夜精品aaa| 国产高清亚洲一区| 在线国产亚洲欧美| 亚洲国产精品二十页| 日韩高清一级片| 色嗨嗨av一区二区三区| 亚洲精品一区二区三区影院 | 成人免费观看av| 欧美一级在线视频| 亚洲综合无码一区二区| 国产成人综合亚洲网站| 欧美成人伊人久久综合网| 午夜精品免费在线| 欧美午夜精品一区二区三区| 国产精品网曝门| 国产精品12区| 日韩欧美综合一区| 午夜精品久久久久久久久久| 91福利社在线观看| 亚洲另类在线视频| 91亚洲国产成人精品一区二区三| 国产夜色精品一区二区av| 久久99精品久久久久久国产越南| 欧美激情在线看| 黑人巨大精品欧美一区| 欧美一区二区在线视频| 亚洲电影激情视频网站| 欧美性欧美巨大黑白大战| 一个色在线综合| 色综合中文综合网| 欧美视频一区在线| 亚洲与欧洲av电影| 在线精品视频一区二区三四| 一区二区视频免费在线观看| 91精品办公室少妇高潮对白| 亚洲一区日韩精品中文字幕| 日本高清无吗v一区| 一区二区三区在线免费播放| 色婷婷av一区二区三区软件| 亚洲国产一区二区三区| 欧美剧在线免费观看网站| 亚洲一二三四区不卡| 欧美日韩一区二区三区免费看| 亚洲成av人片在www色猫咪| 欧美日韩激情在线| 欧美做爰猛烈大尺度电影无法无天| 中文字幕一区二区视频| 91亚洲精品久久久蜜桃| 亚洲18影院在线观看| 精品三级在线看| 成人高清在线视频| 亚洲成人动漫一区| 欧美tk丨vk视频| 成人性生交大片免费看视频在线| 亚洲欧美日韩一区二区| 欧美乱妇23p| 国产白丝精品91爽爽久久| **性色生活片久久毛片| 91 com成人网| 成人小视频免费在线观看| 一区二区三区影院| 精品剧情在线观看| 91麻豆精东视频| 久久99久久99小草精品免视看| 国产精品女上位| 在线成人av网站| www.一区二区| 伦理电影国产精品| 一区二区在线观看免费视频播放| 日韩一区二区精品葵司在线| 成人免费毛片嘿嘿连载视频| 天天综合色天天| 国产婷婷色一区二区三区| 欧美在线免费播放| 粉嫩一区二区三区在线看| 亚洲不卡在线观看| **欧美大码日韩| 久久久午夜精品| 日韩亚洲欧美在线| 日本韩国精品在线| 不卡高清视频专区| 狠狠狠色丁香婷婷综合激情| 亚洲五码中文字幕| 亚洲日本一区二区| 久久久久久99精品| 欧美不卡一区二区| 欧美剧在线免费观看网站| 91黄色免费版| 欧美一区二区视频网站| 91蝌蚪porny成人天涯| 国产精品一卡二卡| 紧缚捆绑精品一区二区| 日韩精品欧美精品| 一区二区三区日韩欧美| 国产精品成人免费在线| 久久久不卡影院| 欧美大片免费久久精品三p| 欧美日韩三级视频| 日本精品裸体写真集在线观看| 成人爽a毛片一区二区免费| 久久电影网站中文字幕| 日本aⅴ精品一区二区三区| 亚洲第一综合色| 亚洲一区二区三区精品在线| 亚洲人成精品久久久久久| 亚洲国产精品t66y| 国产日韩欧美麻豆| 久久免费电影网| 精品sm捆绑视频| 国产欧美日韩亚州综合| 国产欧美一区二区精品性色 | 亚洲美腿欧美偷拍| ...xxx性欧美| 一区二区在线看| 亚洲电影一级黄| 男人的j进女人的j一区| 久久精品国产亚洲一区二区三区| 青青草97国产精品免费观看 | 激情深爱一区二区| 韩国午夜理伦三级不卡影院| 久久精品国产精品亚洲红杏| 久久国产精品72免费观看| 欧美日韩国产电影| 91精品国产欧美日韩| 欧美一级片在线观看| 欧美r级电影在线观看| 久久久久久久久久久久久夜| 亚洲国产精品成人久久综合一区 | 91污在线观看| 在线观看亚洲一区| 日韩你懂的在线播放| 国产欧美日韩三区| 亚洲天堂精品视频| 五月激情综合色| 国产在线精品国自产拍免费| 国产成人在线视频网址| 91色综合久久久久婷婷| 欧美精品 日韩| 精品国产网站在线观看| 国产精品视频看| 性久久久久久久| 国产一区二区电影| 91精品福利在线| 久久综合色之久久综合| 亚洲免费在线电影| av一区二区久久| 91精品国产福利| 欧美韩日一区二区三区四区| 亚洲夂夂婷婷色拍ww47| 精品一区二区三区在线播放| av毛片久久久久**hd| 欧美一区二区高清| 亚洲欧洲成人精品av97| 日韩av不卡一区二区| 99国产精品99久久久久久| 91精品国产综合久久小美女| 国产精品无遮挡| 麻豆高清免费国产一区| 97超碰欧美中文字幕| 精品国产凹凸成av人导航| 亚洲视频一二三区| 国产主播一区二区三区| 欧美日韩三级一区二区| 国产精品久久久久久户外露出| 日日夜夜免费精品视频| 成人av在线电影| 久久久蜜桃精品| 蜜臀av一区二区| 欧美三级在线看| 亚洲伦理在线免费看| 国产久卡久卡久卡久卡视频精品| 欧美人狂配大交3d怪物一区| 亚洲欧美日韩国产一区二区三区| 国产精品一区二区三区乱码| 欧美一区二区三区视频在线| 亚洲你懂的在线视频| 成人午夜免费电影| 久久久久久久久久久久久女国产乱| 免费在线欧美视频| 欧美日韩在线电影| 亚洲欧美日韩小说| www.日韩在线| 国产精品午夜免费| 成人午夜免费电影| 日本一区二区在线不卡| 国产一区二区视频在线播放| 日韩亚洲欧美综合| 久久se精品一区二区| 日韩视频在线你懂得| 天天综合网天天综合色| 欧美日本在线观看| 午夜日韩在线电影| 欧美一区二区三区在线观看| 婷婷中文字幕一区三区| 欧美日韩国产成人在线91| 午夜精品福利视频网站| 欧美三级电影在线看| 亚洲国产精品一区二区久久|