Is there any disadvantage to using -cp compiler option for full pointer support?
Estimated Reading Time: 2 Minutes
By default (i.e. without -cp), the isCOBOL compiler uses Java memory for all data items. The Java Virtual Machine safeguards programs that use purely Java memory and that do not call native functions. These programs cannot cause memory protection faults, bus errors, segmentation violations, stack corruption, illegal instructions, and other memory related problems.
-cp is implemented using native memory. It enables the following functionality:
- Pointer arithmetic
-
All uses of "ADDRESS OF". For example:
-
SET ptr to ADDRESS OF data-item
-
SET ADDRESS OF lk-item TO ptr
-
SET ADDRESS OF lk-item TO ADDRESS OF data-item
-
IF ADDRESS OF data-item NOT = ZERO
-
- A COBOL program to receive and use memory addresses (pointers) from C language and other native functions that have allocated native memory.
- A C language or other native function to save passed addresses and use them outside of the context of the CALL statement (such as is done by some 3rd party software such as Pro*COBOL)
NULL
then add the following compiler option in order to treat NULL
as ZERO
since NULL
is reserved for use with objects (object-oriented programming):
-rm=zero,null
Note: If your program uses pointers only within COBOL and between COBOL programs and does not use pointer arithmetic, then compile with the -ca compiler option instead of -cp. The -ca option has the following effects:
-
Allows the use of the figurative constant
NULL
-
Treats
USAGE POINTER
asUSAGE HANDLE
-
Treats
SET ADDRESS OF lk-item TO ptr
asSET HANDLE OF lk-item TO ptr
-
Treats
SET ADDRESS OF lk-item TO ADDRESS OF data-item
asSET HANDLE OF lk-item TO HANDLE OF data-item
-
Does not allow the following syntax:
SET ptr TO ADDRESS OF data-item