<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。