我在我的程序的全局范围内创建了几个类似(但不相同)的 WTO 宏列表形式的调用:
__asm(
"xxxUtilsStaticWtp WTO TEXT=*,ROUTCDE=(11),LINKAGE=,MF=L \n" // Static list form WTO
: "DS"(xxxUtilsStaticWtp) // DS name to locate list form of WTO
); ...
__asm(
"xxxUtilsStaticSWto WTO TEXT=*,ROUTCDE=(2,10),DESC=(3),LINKAGE=,MF=L \n" // Static list form WTO
: "DS"(xxxUtilsStaticSWto) // DS name to locate list form of WTO
);
(是的,我知道一个在汇编语句声明中有标签,一个没有,这两种方式似乎都无关紧要)。
当它被编译时,编译器会发出关于这些变量的信息:
xxxUtilsStaticSWto Class = static, Length = 256
Type = struct __ASM_DS_256
3180-10:741, 3211-10:770
xxxUtilsStaticWtp Class = static, Length = 256
Type = struct __ASM_DS_256
3089-10:650, 3136-10:695
加上这个错误信息:
ERROR CCN3244 XXXXX.XXXXX.H(XXXUTILS):741 External variable XXXUTILS cannot be redefined.
(请注意,如果删除其中一个声明,它可以正常工作)。
如果我理解正确,编译器会将名称缩短为八个字符(我没有使用 GOFF),因此这两个字符都与名称 XXXUTILS 发生冲突。
我知道我可以通过在声明中添加“静态”来防止全局范围内的其他类型的声明成为外部声明,例如
static int MyRoutine(int Input) { <code> }
or
static int AnInt = 5;
我在Inline 汇编语句(IBM 扩展)上花了一些时间,但不知道如何以某种方式将“静态”一词压缩到 __asm 语句中,或者是否有其他方法可以做到这一点。
有人对如何做到这一点有任何想法吗?
谢谢你,斯科特·法根