C 和 C++ 编程限制和要求
某些限制和要求适用于用作 CICS® 应用程序的 C 或 C++ 程序。
无法使用的函数和命令
C 和 C++ 应用程序不支持与非结构化异常处理相关的以下 EXEC CICS 命令:
- HANDLE ABEND LABEL(label)
- HANDLE AID
- HANDLE CONDITION
- IGNORE CONDITION
- PUSH HANDLE
- POP HANDLE
CICS 不支持 system () 函数,但是两个 CICS 命令 LINK 和 XCTL 提供了等效的函数。
CICS 不支持扩展精度浮点。
C++ 不支持压缩十进制数据。 应用程序有权使用字符串数据类型来访问压缩十进制数据。 没有 C++ 标准库函数可用于对此数据执行算术,但您可以编写自己的函数。 使用具有用于指定时间的选项 (例如, DELAY 或 POST 命令) 的 CICS 命令时,建议使用 HOURS , MINUTES 和 SECONDS 选项。 如果您提供在应用程序中处理时间的函数,那么可以使用压缩十进制数据类型的 TIME 或 INTERVAL 选项来定义时间。
C 和 C++ 不支持在宏中使用 CICS 命令。
本机 C 或 C++ 文件操作仅对在指定了 type=memory 的情况下打开的文件执行。 对 CICS支持的访问方法的 I/O 必须使用 CICS API。
在源程序中允许所有本机 C 和 C++ 函数,但建议不要使用以下函数。 某些是不可执行的,并导致返回码或指针指示函数已失败。 某些操作可能起作用,但可能会影响 CICS的性能或执行。
- CDUMP
- CSNAP
- CTEST
- CTRACE
- CLOCK (时钟 () 函数返回值 (time_t) -1。)
- CTDLI
- SVC99
- SYSTEM
- setLocale
编码要求
- 您可以混合输入所有 CICS 关键字,但 #pragma 伪指令上的 CICS 关键字除外,这些关键字必须仅为大写。
- 其中, CICS 需要固定长度的字符串 (例如,程序名,映射名或队列名) ,如果该字面值的长度比预期短,那么必须用空格填充该字面值,直至达到所需长度。 对于 EXEC DLI 命令,如果传递了文字,那么转换程序将填充 SEGMENT 名称。
- 请勿使用汇编程序可接受的字段名称,但这会导致 C 或 C++ 编译器异常终止。 这些名称包括 $, # 和 @。
- C++ 将 "//" 用于单行注释。 请勿将此类注释放在 EXEC CICS 命令的中间。 例如,以下代码无效:
以下代码示例有效:EXEC CICS SEND TEXT FROM(errmsg) LENGTH(msglen) // Send error message to screen RESP(rcode) RESP2(rcode2);EXEC CICS SEND TEXT FROM(errmsg) LENGTH(msglen) RESP(rcode) RESP2(rcode2); //Send error message to screenEXEC CICS SEND TEXT FROM(errmsg) LENGTH(msglen) /* Send error message to screen */ RESP(rcode) RESP2(rcode2);
条件处理
在 C 或 C++ 应用程序中,每个 EXEC CICS 命令都被视为指定了 NOHANDLE 或 RESP 选项。 因此,系统操作事务的集合会异常终止,这是由于发生了某个条件而导致的,但无法进行处理。 控制始终流至下一个指令,应用程序负责测试正常响应。
COMMAREA
通信区域的地址未作为自变量传递给 C 或 C++ 主函数。 这意味着 C 和 C++ 函数必须使用 ADDRESS COMMAREA 来获取通信区的地址。EIB
EXEC 接口块 (EIB) 的地址未作为自变量传递至 C 或 C++ 主函数。 这意味着 C 和 C++ 函数必须使用 ADDRESS EIB 来获取 EIB 的地址。 请参阅 从 C 和 C++ 访问 EIB 以获取更多信息。LENGTH
If you do not specify the LENGTH option on commands that support LENGTH (for example, READ , READNEXT , READPREV , and WRITE commands), the translator does not supply a default value. 实际上, NOLENGTH 对于 C 程序是隐式的。OVERFLOW 条件
如果希望在从带有 ACCUM 选项的 SEND MAP 命令返回时在 RESP 字段中指示任何 OVERFLOW 条件,那么应指定 NOFLUSH 选项。寻址方式
在 CICS 下运行的所有 C 和 C++ 语言程序都必须使用属性 AMODE (31) 和 RMODE (ANY) 进行链接编辑。 它们可以位于 16 MB 界线之上。因此,将参数传递到由跨系统产品 (CSP) 交互式应用程序生成器生成的程序时,必须执行下列其中一项操作:
- 传递低于 16 MB 的参数
- 将 CSP 装入库与 AMODE (31) 重新链接
C 和 C++ 语言程序不支持 64 位寻址方式 (AMODE (64))。
64 位驻留方式
CICS 不支持 64 位驻留方式 (RMODE (64)) ,并将任何 RMODE (64) 程序视为 RMODE (31)。 即,将 RMODE (64) 程序装入到 31 位 (界线以上) 存储器中,而不是 64 位 (界线以上) 存储器中。
返回值
如果使用 exit () 函数或 return 语句 (而不是 CICS RETURN 命令) 终止 C 或 C++ 程序,那么从程序返回时,通过 exit () 函数传递的值将保存在 EIB 的 EIBRESP2 字段中。注: 如果程序使用 DPL 链接到另一个 CICS 区域中的程序,那么来自远程区域的 EIBRESP2 值 不会 返回到执行 DPL 的程序。
数据声明
CICS for C 和 C++ 提供了以下数据声明:
- 执行接口块定义 (EIB)。 EIB 声明包含在 #ifndef 和 #endif 行中,并且包含在所有已翻译的文件中。 C 或 C++ 编译器忽略重复的声明。 插入的代码包含以 C 和 C++ 编码的 EIB 中所有字段的定义。
- BMS 屏幕属性定义 :C 和 C++ 版本的 DFHBMSCA , DFHMSRCA 和 DFHAID 文件由 CICS提供,并且可以由应用程序员在使用 BMS 时包含。
- DL/I 支持: 如果已指定转换程序选项,那么 DLI 转换程序将包含 DFHDIB 的 C 语言版本。 (如果使用了 CALL DLI 接口,那么必须包含 DLIUIB。)