我试图弄清楚如何在单个数据集/文件中包含相同 DSECT/struct 的 HLASM 和 Metal C 定义。
在尝试此操作之前,我尝试了我在如何使用#include 进行这项工作中描述的内容?直接放入代码中时效果很好
所以,我走了另一条路,并想我可以使用#define 将汇编器中的 MACRO 语句更改为 C 编译器将使用的内容:
- 将“宏”更改为“#pragma margins(2,72)”
将“MEND”更改为“#pragma nomargins”
EDIT SSAF.METALC.H(CKKTEST) - 01.01 Columns 00001 00080 Command ===> Scroll ===> CSR ****** ********************************* Top of Data ********************************** 000001 MACRO 000002 */* First line of macro prolog */ 000003 */* Last line of macro prolog */ 000004 *#if 0!=0 // Bypass asm in C 000005 Test DSECT 000006 Test@ DS A 000007 TestINT DS F 000008 TestChar DS C 000009 *#endif 000010 MEND 000011 struct Test { 000012 void *Test@; 000013 int TestInt; 000014 char TestChar; 000015 }; ****** ******************************** Bottom of Data ********************************
而且我认为我可以使用#define 将“MACRO”和“MEND”更改为 C 编译器想要的内容,首先我尝试不使用引号:
EDIT SSAF.METALC.C(CKLTHING) - 01.01 Columns 00001 00080
Command ===> Scroll ===> CSR
000207 #define MACRO #pragma margins(2,72)
000208 #define MEND #pragma nomargins
000209 #include"ckktest.h"
这没有产生预期的结果:
|
207 |#define MACRO #pragma margins(2,72)
208 |#define MEND #pragma nomargins
209 |#include"ckktest.h"
*=ERROR===========> CCN3191 The character # is not a valid C source character.
*=ERROR===========> CCN3166 Definition of function pragma requires parentheses.
*=ERROR===========> CCN3191 The character # is not a valid C source character.
*=ERROR===========> CCN3191 The character # is not a valid C source character.
*=ERROR===========> CCN3191 The character # is not a valid C source character.
*=ERROR===========> CCN3276 Syntax error: possible missing '{'?
然后我尝试将#define 值括在引号中:
207 |#define MACRO "#pragma margins(2,72)"
208 |#define MEND "#pragma nomargins"
209 |#include"ckktest.h"
*=ERROR===========> CCN3191 The character # is not a valid C source character.
*=ERROR===========> CCN3191 The character # is not a valid C source character.
210 |
这提供了更少的错误消息,但仍然不是我需要的。
注意:我使用的 # 是 EBCDIC 7B。
错误消息的描述相当简洁:
CCN3191 字符 &1 不是有效的 C 源字符。说明 有关有效字符的信息,请参阅 C/C++ 语言参考。
在消息文本中:
&1 是一个字符。
用户响应 更改字符。
我参考了 C/C++ 语言参考,但找不到任何说明我不能在#define 中使用“#”的内容。事实上,关于 # 和 ## 运算符有一些话......
有没有办法解决这个问题?
谢谢,斯科特