How do I use conditional compilation?
Estimated Reading Time: 2 MinutesQuestion:
How do I use compiler directives to conditionally include or exclude sections of code?
Answer:
Here are some examples of conditional compilation:
EVALUATE and WHEN in a bug test program:
id division. program-id. chinese. data division. working-storage section. >> EVALUATE CASE >> WHEN "TEST-1" 77 chinese-item pic n(2) value nx"4EAC". >> WHEN "TEST-2" 77 chinese-item pic n(1) value nx"4EAC". >> WHEN "TEST-3" 77 chinese-item pic n(1) usage national. >> END-EVALUATE procedure division. main-logic. display standard graphical window. display chinese-item. accept omitted.Then you can specify which variable to use by setting iscobol.compiler.const. You can set it in a compiler properties file:
iscobol.compiler.const.CASE=TEST-1or from the command line.
iscc -Discobol.compiler.const.CASE=TEST-1 chinese.cblto include the TEST-1 case.
An alternative would be to add the following to the top of chinese.cbl:
>> DEFINE CASE AS "TEST-3"and write the program as:
id division. program-id. chinese. data division. working-storage section. >> IF CASE IS = "TEST-1" 77 chinese-item pic n(2) value nx"4EAC". >> ELSE >> IF CASE IS = "TEST-2" 77 chinese-item pic n(1) value nx"4EAC". >> ELSE >> IF CASE IS = "TEST-3" 77 chinese-item pic n(1) usage national. >> END-IF >> END-IF >> END-IF procedure division. main-logic. display standard graphical window. display chinese-item. accept omitted.In the above, CASE is a preprocessor constant set to either "TEST-1", "TEST-2" or "TEST-3".
The program could also be written to just test whether a constant is defined, as follows:
id division. program-id. chinese. data division. working-storage section. >> IF TEST-1 IS DEFINED 77 chinese-item pic n(2) value nx"4EAC". >> ELSE >> IF TEST-2 IS DEFINED 77 chinese-item pic n(1) value nx"4EAC". >> ELSE >> IF TEST-3 IS DEFINED 77 chinese-item pic n(1) usage national. >> END-IF >> END-IF >> END-IF procedure division. main-logic. display standard graphical window. display chinese-item. accept omitted.and then compiled with this variable set in your compiler properties file:
iscobol.compiler.const.TEST-1=onor on your command line:
iscc -Discobol.compiler.const.TEST-1=1 chinese.cblYou can read more about the DEFINE, EVALUATE, and IF compiler directives in the isCOBOL SDK documentation, under the "Compiler and Runtime / Compiler / Compiler Directives" section