我最近发现了像ILE C源这样的东西,用于通过多记录显示文件读取和写入物理文件,所以我自己创建了一个。
所以,有可能用RPG和某些指标来做。
看起来像:
C Exfmt Screen
C If *In25 = *Off
C ...enter key pressed
C Else
C ...function key pressed
C EndIf
我们在哪里
d Cmd_Enter c Const(x'F1')
然而,当我尝试使用C编译完全相同的事情时失败。
以下是样本的一部分:
#define ENTER 0xF1;
...
_SYSindara indicator_area;
do
{
if(somevar != NULL)
{
indicator_area[ENTER] == IND_OFF;
//do stuff
if (indicator_area[EXIT] == IND_ON)
{
break;
}
}
while(indicator_area[ENTER] != IND_ON);
错误我在包含ENTER
的每一行:
MYLIB/PGMSRC(SRC), 113.27: CZM0275(30) Unexpected text ';' encountered.
我已尝试将ENTER
定义为0xD
(输入ASCII代码),0xF1
,24
(* in25,如上所述) - 没有任何帮助让这段代码起作用。
欢迎任何提示。
答案 0 :(得分:3)
在我看来,您的困惑在于您尝试使用AID字节x'F1'
的ENTER值来索引您使用
indicator_area
_SYSindara indicator_area;
这不起作用,因为_SYSindara
被定义为char[99]
。您可以从显示文件中检索指示符区域,但是您不会看到位于显示文件I / O反馈区域中的AID字节。这是使用
#include <xxfdbk.h>
_XXIOFB_T *iofb; /* Pointer to the file's feedback area */
_XXIOFB_DSP_ICF_T *dspfb; /* Pointer to display file specific feedback area */
iofb = _Riofbk ( fp );
dspfb = iofb + iofb->file_dep_fb_offset;
if (dspfb->AID_byte_indic == ENTER) {
// do something
}
您可以在IBM Knowledge Center for IBM i中找到更多信息here和here。在QSYSINC/H(XXFDBK.C)
上的IBM i
。
答案 1 :(得分:1)
从#define中删除分号,如下所示:
#define ENTER 0xF1
C语法的一个怪癖是编译器定义不应该有一个结束分号(除非你需要它用于多语句定义,但这超出了对这个问题的需要)。 / p>
更长的解释: 在编译之前,编译器定义(#define)实际上是源代码中的简单文本替换。在以下行中发生了什么
indicator_area[ENTER] = IND_OFF;
是它被替换为 indicator_area [0xF1;] = IND_OFF; 这是一个语法错误。对于编译器定义,分号不是常规C语句的特殊结束语句字符。如果您需要执行多行编译器定义(您可能不会这样做),则应该转义新行以执行此操作。例如:
#define MY_LONG_DEFINE This is a test \
This is only a test. If this had \
been longer, more lines would be \
escaped.
我还应该注意到@Gerhardh是正确的,因为你不应该使用双等于赋值。我已经在上面的例子中纠正了它。