ansiSetjmp.c
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:3k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* ansiSetjmp.c - ANSI 'setjmp' documentation */
  2. /* Copyright 1984-1995 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01e,27oct95,jdi  doc: setjmp() no longer a macro (SPR 5300).
  7. 01d,27feb95,rhp  updated and reconciled with longjmp.c comments
  8. 01c,16feb95,jdi  doc style change.
  9. 01b,18jan95,rhp  describe ISR restrictions (SPR#3277)
  10. 01a,24oct92,smb  written.
  11. */
  12. /*
  13. DESCRIPTION
  14. The header setjmp.h defines functions and
  15. one type for bypassing the normal function call and return discipline.
  16. The type declared is:
  17. .iP `jmp_buf' 12
  18. an array type suitable for holding the information needed to restore
  19. a calling environment.
  20. .LP
  21. The ANSI C standard does not specify whether setjmp() is a subroutine
  22. or a macro.
  23. SEE ALSO: American National Standard X3.159-1989
  24. */
  25. /*******************************************************************************
  26. *
  27. * setjmp - save the calling environment in a `jmp_buf' argument (ANSI)
  28. * This routine saves the calling environment in <env>, in order to permit
  29. * a longjmp() call to restore that environment (thus performing a
  30. * non-local goto).
  31. *
  32. * .SS "Constraints on Calling Environment"
  33. * The setjmp() routine may only be used in the following
  34. * contexts:
  35. * .iP
  36. * as the entire controlling expression of a selection or iteration statement;
  37. * .iP
  38. * as one operand of a relational or equality operator, in the
  39. * controlling expression of a selection or iteration statement;
  40. * .iP
  41. * as the operand of a single-argument `!' operator, in the controlling
  42. * expression of a selection or iteration statement; or
  43. * .iP
  44. * as a complete C statement statement containing nothing other than
  45. * the setjmp() call (though the result may be cast to `void').
  46. * RETURNS
  47. * From a direct invocation, setjmp() returns zero.  From a call
  48. * to longjmp(), it returns a non-zero value specified as an argument
  49. * to longjmp().
  50. * SEE ALSO
  51. * longjmp()
  52. */
  53. int setjmp
  54.     (
  55.     jmp_buf env
  56.     )
  57.     {
  58.     }
  59. /*******************************************************************************
  60. *
  61. * longjmp - perform non-local goto by restoring saved environment (ANSI) 
  62. * This routine restores the environment saved by the most recent
  63. * invocation of the setjmp() routine that used the same `jmp_buf'
  64. * specified in the argument <env>.  The restored environment includes
  65. * the program counter, thus transferring control to the setjmp()
  66. * caller.
  67. * If there was no corresponding setjmp() call, or if the function
  68. * containing the corresponding setjmp() routine call has already
  69. * returned, the behavior of longjmp() is unpredictable.
  70. *  
  71. * All accessible objects in memory retain their values as of the time
  72. * longjmp() was called, with one exception: local objects on the C
  73. * stack that are not declared `volatile', and have been changed
  74. * between the setjmp() invocation and the longjmp() call, have
  75. * unpredictable values.
  76. *  
  77. * The longjmp() function executes correctly in contexts of signal
  78. * handlers and any of their associated functions (but not from interrupt
  79. * handlers).
  80. * WARNING: Do not use longjmp() or setjmp() from an ISR.
  81. *
  82. * RETURNS:
  83. * This routine does not return to its caller.
  84. * Instead, it causes setjmp() to return <val>, unless <val> is 0; in
  85. * that case setjmp() returns 1.
  86. * SEE ALSO
  87. * setjmp()
  88. */
  89. void longjmp
  90.     (
  91.     jmp_buf env,
  92.     int val
  93.     )
  94.     {
  95.     }