Skip to Content

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)
Veryant recommends that you use the -cp compiler option only if you require one or more of the above capabilities.

Note: If you need to compile with -cp and your program uses the figurative constant 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
    as
    USAGE HANDLE
  • Treats
    SET ADDRESS OF lk-item TO ptr
    as
    SET HANDLE OF lk-item TO ptr
  • Treats
    SET ADDRESS OF lk-item TO ADDRESS OF data-item
    as
    SET HANDLE OF lk-item TO HANDLE OF data-item
  • Does not allow the following syntax:
    SET ptr TO ADDRESS OF data-item
See also Does SET ADDRESS OF X TO Y work?
Is there any disadvantage to using -cp compiler option for full pointer support?