z/OS XL C/C++ and PL/I

Language Environment supports ILC between routines written in z/OS XL C/C++ and PL/I for MVS & VM or Enterprise PL/I for z/OS under CICS® as follows:
  • z/OS XL C/C++ routines can statically call PL/I routines.
  • PL/I routines can statically call z/OS XL C/C++ routines.
  • z/OS XL C/C++ routines can fetch() PL/I routines that have OPTIONS(FETCHABLE) specified.
  • PL/I routines can FETCH only those z/OS XL C/C++ routines that have not been run through the CICS translator. A PL/I routine cannot dynamically call an z/OS XL C/C++ routine that has been translated because the CICS translator introduces writable static data elements that are not capable of being initialized when the dynamic call is made.

    In addition, during the FETCH of z/OS XL C/C++ from PL/I, the static read/write pointer is not swapped.

  • z/OS XL C/C++ routines calling PL/I routines must pass the EIB and COMMAREA as the first two parameters if the called routine contains any EXEC CICS commands.
  • There is no support under CICS for ILC calls to or from routines written in pre-Language Environment-conforming versions of C or PL/I.

All components of your z/OS XL C/C++ to PL/I ILC application must be reentrant.

If there is any ILC with a run unit under CICS, each compile unit must be compiled with a Language Environment-conforming compiler.

For more information about ILC between PL/I and C, see Communicating between C and PL/I.