如何处理文字作为CALL语句的参数?

MC *_*ror 1 cobol

我正在尝试传递一个字符串文字作为CALL语句的参数.

CALL "SOMEPROGRAM" USING "SomeStringLiteralArg"
Run Code Online (Sandbox Code Playgroud)

我必须将参数定义为被调用子程序中的链接项:

LINKAGE SECTION.
 77 SOME-STRING-ARGUMENT PIC X(20).
Run Code Online (Sandbox Code Playgroud)

这是有效的,但是当我传递一个短于20个字符的字符串文字时,运行时开始抱怨:

通过USING项目(#1)小于相应的LINKAGE项目.

给定的字符串文字长度必须为20个字符.但是我有理由将字符串文字作为参数传递:

  • 我懒得为每个传递给程序的项目定义一个临时变量.对于我传递给程序的每个项目,在工作存储中具有不同长度的100个"临时"变量会使程序不必要地混乱.

    MOVE "ShortStrLit" TO SOME-TEMP-VAR
    CALL "SOMEPROGRAM" USING SOME-TEMP-VAR
    
    Run Code Online (Sandbox Code Playgroud)
  • 我也不想手动填充字符串文字以匹配所需的20个字符的长度:

    CALL "SOMEPROGRAM" USING "shortStrLit         "
    
    Run Code Online (Sandbox Code Playgroud)

我的一个问题是,当然:我如何将一个文字作为一个CALL陈述的参数传递?但是,更重要的是,潜在的问题是:如何CALL处理文字作为语句的参数?例如,如果我传递9,它是否被解释为内容为"9"的字符串,还是编译时转换为整数?


我在Windows 10上运行MicroFocus ACUCOBOL-GT 9.2.4.

Sim*_*sch 5

这里有两个问题:

首先 - 我应该如何传递字母数字文字:

对于CALL some-cobol-prog USING "alphanumeric literal"COBOL 2002,添加了以下内容:

LINKAGE SECTION.
 01 SOME-STRING-ARGUMENT PIC X ANY LENGTH.
Run Code Online (Sandbox Code Playgroud)

如果您的编译器不支持它,您必须填充文字或使用变量.

第二 - 数字文字被解释为字母数字:

我见过的所有编译器都将它转换为整数 - 如何且最重要的是什么类型完全取决于所使用的编译器...