<except.h>

<except.h> include 文件声明了 ILE C 异常处理中使用的类型和宏。

_INTRPT_Hndlr_Parms_T 的定义为:
typedef _Packed struct {
  unsigned int    Block_Size;
  _INVFLAGS_T     Tgt_Flags;
  char            reserved[8];
  _INVPTR         Target;
  _INVPTR         Source;
  _SPCPTR         Com_Area;
  char            Compare_Data[32];
  char            Msg_Id[7];
  char            reserved1;
  _INTRPT_Mask_T  Mask;
  unsigned int    Msg_Ref_Key;
  unsigned short  Exception_Id;
  unsigned short  Compare_Data_Len;
  char            Signal_Class;
  char            Priority;
  short           Severity;
  char            reserved3[4];
  int             Msg_Data_Len;
  char            Mch_Dep_Data[10];
  char            Tgt_Inv_Type;
  _SUSPENDPTR     Tgt_Suspend;
  char            Ex_Data[48];
} _INTRPT_Hndlr_Parms_T;
元素
描述
BLOCK_SIZE
传递到异常处理程序的参数块的大小。
目标标志
包含系统使用的标志。
保留的
8 个字节的保留字段。
目标
一个调用指针,指向启用了异常处理程序的调用堆栈条目。
调用指向导致异常的调用堆栈项的调用指针。 如果该调用堆栈项不再存在,那么这是一个指向调用堆栈项的指针,在处理异常时,控制将在该调用堆栈项中恢复。
通信区域
一个指向通信区域变量的指针,该变量指定为 #pragma exception_handler 上的第二个参数。 如果未指定通信区域,那么此值为 NULL。
压缩数据
比较数据由 4 字节的消息前缀 (例如 CPF 和 MCH) 组成,后跟从相关消息的消息数据中获取的 28 个字节。 在消息数据大于 28 的情况下,这些是前 28 个字节。 对于 MCH 消息,这些是系统返回的异常相关数据的前 28 个字节 (替换文本)。
消息标识
消息标识,例如 CPF123D。 *STATUS 消息类型未在此字段中更新。
reserved1
1 字节填充。
掩码
这是一个 8 字节的异常掩码,用于标识发生的异常类型,例如十进制数据错误。 可能的类型显示在 表 1中。
消息引用键
用于唯一标识消息的键。
异常标识
异常标识的二进制值,例如 0x123D。 要显示值,请使用转换说明符 %x ,因为信息以十六进制值存储。
压缩数据 (Len)
比较数据的长度。
信号类
内部信号类。
优先级
处理程序优先级。
严重性
消息严重性。
reserved3
4 字节保留字段。
消息数据长度
可用消息数据的长度。
Mch_Dep_Data
依赖于机器的数据。
目标调用类型
调用类型。 宏定义在 < mimchobs.h > 中。
目标暂挂
暂挂目标的指针。
外部数据
异常数据的前 48 个字节。
_CNL_Hndlr_Parms_T 的定义为:
typedef _Packed struct {
  unsigned int    Block_Size;
  _INVFLAGS_T     Inv_Flags;
  char            reserved[8];
  _INVPTR         Invocation;
  _SPCPTR         Com_Area;
  _CNL_Mask_T     Mask;
} _CNL_Hndlr_Parms_T;
元素
描述
BLOCK_SIZE
传递到取消处理程序的参数块的大小。
因弗拉格斯
包含系统使用的标志。
保留的
8 个字节的保留字段。
调用
要取消的调用的调用指针。
通信区域
指向由取消处理程序定义的处理程序通信区域的指针。
掩码
指示取消原因的 4 字节值。

< except.h > 中定义了以下内置功能:

内置
描述
__EXBDY
__EXBDY 内置宏或 _EXBDY 宏的用途是充当异常敏感操作的边界。 异常敏感操作是可能发出异常信号的操作。 EXBDY 使程序员能够选择性地抑制执行代码移动的优化。 例如,除法是对异常敏感的操作,因为它可以发出除零信号。 包含 EXBDY 和除法的执行路径将以相同顺序执行两者,无论是否进行优化。 例如:
b = exp1;
c = exp2;
...
_EXBDY();
a = b/c;   
__VBDY
__VBDY 内置宏或 _VBDY 宏的用途是确保对于可能在异常路径上使用的变量,主存储位置是最新的。 这将确保异常处理程序中变量的当前值的可视性。 VBDY 使程序员能够选择性地抑制优化,例如冗余存储消除和转发存储运动,以强制变量更新的顺序一致性。 在以下示例中, VBDYs 确保状态在可能发出异常信号的每个代码块之前的主存储位置中。 VBDY 通常与 EXBDY 结合使用,以确保先前对状态变量的赋值确实会更新主存储位置,并且在这些赋值之前不会移动后续的异常敏感操作。
 state = 1;
 _VBDY();
 /* Do stuff that may signal an exception.          */
 state = 2;
 _VBDY();
 /* More stuff that may signal an exception.        */
state = 3;
_VBDY();    

有关内置的更多信息,请参阅 ILE C/C++ for AS/400 MI Library Reference