定义

使用 DEFINE 编译器选项,通过将 DEFINE 伪指令与 PARAMETER 短语配合使用,为程序中定义的编译变量指定字面值。 在 DEFINE 选项中为编译变量提供的字面值有时称为对应编译变量的 "参数值"。 可以在任何条件编译伪指令中使用编译变量,包括 DEFINEEVALUATEIF。 当条件编译变量出现在条件编译伪指令中时,它将被视为对它当前表示的字面值的符号引用。

DEFINE 编译器选项为您提供了一种从程序源外部向编译变量赋值的方法。 如果不需要,那么在程序源中使用 DEFINE 伪指令来定义编译变量就足够了。

DEFINE 选项语法

读取语法图跳过可视语法图NODEFINEDEFINE( compilation-variable-name-1=,literal-1)

缺省值为: NODEFINE

缩写为: DEF | NODEF

compilation-variable-name-1
要在程序中的条件编译伪指令中引用的编译变量的名称。 如果对于程序中的 compilation-variable-name-1 ,不存在具有 PARAMETER 短语的相应 DEFINE 伪指令,那么将忽略为该编译变量指定的 DEFINE 编译器选项的任何实例。 compilation-variable-name-1 是根据数据名称用户定义的词的规则构成的,但名称中不允许使用 DBCS 字符。 有关详细信息,请参阅 COBOL for Linux® on x86 Language Reference中的 User-defined words
literal-1
compilation-variable-name-1 将在程序中的条件编译相关伪指令中象征性地表示的字面值。 literal-1 必须是下列其中一项:
  • 字母数字字面值,可以指定为常规字母数字字面值('abcd')或十六进制字面值( x'F1F2F3' )。 不支持本地文字, DBCS 文字和以 null 结束的字母数字文字 (Z 文字)。
  • 整数文字。
  • 布尔文字 (仅支持 B "0" 和 B "1")。
如果未指定 literal-1 ,那么将对编译变量指定值 B "1"。 例如,如果您指定:
>>define foo
将为 foo 分配值 B "1"。
注: 编译器解释某些 shell 脚本编制字符 如下所示:
  • 将等号 (=) 解释为左括号, (
  • 将冒号 (:) 解释为右括号,)
  • 下划线 (_) 解释为单引号 (')

您可以添加反斜杠 (\) 转义字符以阻止解释,从而在字符串中传递字符。 如果希望反斜杠 (\) 表示自身 (而不是转义字符) ,请使用双反斜杠 (\\)。

例如,要使用 DEFINE 选项将字面值 1 指定给编译变量 VAR1,请按如下所示指定 DEFINE 选项:
DEFINE(VAR1=1)
如果 VAR1 包含要从编译器解释中转义的等号,冒号或下划线,请按如下所示指定 DEFINE 选项:
DEFINE(VAR1\=1)

可以指定 DEFINE 选项的多个实例,以定义多个不同编译变量的值。 如果多次定义单个条件编译变量,那么该变量的最后一个定义将用作相应条件编译变量的值。 如果 NODEFINE 出现在 DEFINE 选项的先前实例之后,那么将取消所有条件编译变量的定义。

在 CBL 语句中指定 DEFINE 选项时,只能在批处理程序的第一个程序上使用这些选项。 因此,如果一个文件中有多个 COBOL 程序,那么在第一个程序之前可以有带有 DEFINE 选项的 CBL 语句,而其他程序则没有。 为第一个程序指定的 DEFINE 选项 (以及作为 cob2 命令选项指定的 DEFINE 选项) 适用于文件中的所有程序。

相关参考
条件编译 (COBOL for Linux on x86 Language Reference)
DEFINE (COBOL for Linux on x86 Language Reference)