条件翻訳を使用すると,翻訳変数を用いた条件式の真偽に従って,ソースコードの有効/無効を制御できます。翻訳変数は,原始プログラム中にDEFINEを書いて定義する方法と,コンパイル時に-Defineオプションを指定して定義する方法があります。
翻訳指令の詳細な構文規則および一般規則については,マニュアル「COBOL2002 言語 標準仕様編 3. 翻訳指令機能」を参照してください。
条件翻訳の使用例を,次に示します。
000100*>IFとDEFINED条件の例
000200 IDENTIFICATION DIVISION.
000300 PROGRAM-ID. IF-SYNTAX.
000400 DATA DIVISION.
000500 >>DEFINE CHR01 AS 'ABCD'
000600 WORKING-STORAGE SECTION.
000700 PROCEDURE DIVISION.
000800 >>IF CHR01 IS DEFINED
000810 *> 翻訳変数CHR01は定義されているのでこちらが有効になる
000900 DISPLAY '--- CHR01 IS DEFINED ---'.
001000 >>ELSE
001100 *> こちらの行はコンパイルの結果無効となる
001100 DISPLAY '--- CHR01 IS NOT DEFINED ---'.
001200 >>END-IF
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. TEST001.
000300 PROCEDURE DIVISION.
000400
000500 >>IF DEBUG IS DEFINED
000600 DISPLAY 'this is debug message'.
000700 >>END-IF
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. TEST001.
000300 DATA DIVISION.
000400 WORKING-STORAGE SECTION.
000500 PROCEDURE DIVISION.
000600 >>DEFINE EXD01 AS 10
000700
000800 >>EVALUATE EXD01 *> 翻訳変数 EXD01の値を評価する
000900 >>WHEN 3
001000 DISPLAY '--- 3 ---'.
001100 >>WHEN 15
001200 DISPLAY '--- 15 ---'.
001300 >>WHEN 9 THRU 11 *> 9から11の間にある場合
001400 DISPLAY '--- 9 THRU 11 ---'. *> ここが有効となる
001500 >>WHEN OTHER
001600 DISPLAY '--- WHEN OTHER ---'.
001700 >>END-EVALUATE
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. DEFINE01.
000300 DATA DIVISION.
000400 WORKING-STORAGE SECTION.
000500 >>DEFINE LEVEL AS 2
000600 PROCEDURE DIVISION.
000700 >>EVALUATE TRUE
000800 >>WHEN LEVEL < 3 *> ここが真
000900 DISPLAY 'lower'.
001000 >>WHEN LEVEL > 5
001100 DISPLAY 'higher'.
001200 >>WHEN OTHER
001300 DISPLAY 'other'.
001400 >>END-EVALUATE
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. DEFINE01.
000300 DATA DIVISION.
000400 WORKING-STORAGE SECTION.
000500 >>DEFINE LEVEL AS 2
000600 PROCEDURE DIVISION.
000700 >>EVALUATE TRUE
000800 >>WHEN LEVEL < 3 *> ここが真
000900 DISPLAY 'lower'.
001000 >>WHEN LEVEL > 5
001100 DISPLAY 'higher'.
001200 >>WHEN LEVEL < 5 *>ここも真だが,すでに真となるWHENが存在する。
001300 DISPLAY 'lower 2'. *> よってここは実行されない。
001400 >>WHEN OTHER
001500 DISPLAY 'other'.
001600 >>END-EVALUATE
ソースファイル名称:SAMPLE1.cbl
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. DEFINEOPTION.
000300 DATA DIVISION.
000400 WORKING-STORAGE SECTION.
000500 PROCEDURE DIVISION.
000600 >>IF CHR01 = 'ABCD'
000700 *> 翻訳変数CHR01は-DefineオプションでABCDと定義。
000750 *> よってこちらが真。
000800 DISPLAY '--- CHR01 IS "ABCD" ---'.
000900 >>ELSE
001000 *> こちらの行は偽
001100 DISPLAY '--- CHR01 IS NOT "ABCD" ---'.
001200 >>END-IF