Progress是否支持将预处理器变量作为.i文件参数并转发?
Progress预处理器参数使用与转发问题解答
1. Progress支持使用预处理器变量作为.i文件的命名输入参数
你给出的示例代码完全可行。Progress预处理器会按解析顺序处理这些定义:
- 首先
&GLOBAL-DEFINE MYDATATYPE INTEGER将MYDATATYPE定义为全局预处理器变量,值为INTEGER - 在包含
myinclude.i时,{&MYDATATYPE}会被替换为INTEGER,传递给&DATATYPE参数 - 最终
myinclude.i里的代码会被预处理器展开为DEF VAR data AS INTEGER NO-UNDO.
同样,&SCOPED-DEFINE也能实现相同效果,只要该定义的作用域覆盖到包含.i文件的语句即可(比如在当前程序的某个块内定义,包含语句在该块范围内就能访问)。
2. 可以在包含文件内将参数转发给另一个包含文件
只需在当前包含文件里,把收到的预处理器参数原样(或经过处理后)传递给下一个包含文件即可。举个扩展示例:
myprocedure.p
&GLOBAL-DEFINE MYDATATYPE INTEGER {myinclude.i &DATATYPE={&MYDATATYPE} }
myinclude.i
DEF VAR data AS &DATATYPE NO-UNDO. // 将收到的&DATATYPE参数转发给myinclude2.i的&TYPE参数 {myinclude2.i &TYPE={&DATATYPE} }
myinclude2.i
DEF VAR secondaryData AS &TYPE NO-UNDO.
预处理器会依次解析这些层级,最终secondaryData的类型也会被设置为INTEGER,实现参数的转发传递。
内容的提问来源于stack exchange,提问作者W0lfw00ds
相关产品推荐
相关产品推荐

