When using any system programming C environment, consider the following:
- The long long data type is not supported for the function sprintf() under
SPC. If you need to use the long long data type, you must use the
C/C++ Runtime library version of the sprintf() function.).
- The fetch()
function is not supported when you are running in a system programming
C environment. You can use the EDCXLOAD routine, as described
in Loading a module, to simulate some of the functionality of
the fetch() function.
- The IMS parameter list established by the #pragma runopts(PLIST(IMS))
directive
is
not supported in any of the system programming environments. However,
this does not preclude the use of IMS within these environments, because
the registers upon entry are available using the __xregs() function
and ctdli() is bound statically. For more information on __xregs(),
refer to __xregs() — Get Registers on Entry.
- Interlanguage calls to COBOL and PL/I are not supported. However,
an SPC program can use the system() function to call modules written
in other languages.
- SPC is not supported under CICS or MTF.
- Library functions for use with UNIX file system I/O are not supported
under SPC. Calling them causes unpredictable results.
- All runtime options are ignored except for:
- Redirection of standard streams is not supported.
- The default initial stack size is the minimum size required to
start
the C program. (This default is different from the non-systems programming
C environments.) If a size is specified, that actual value is used,
provided it is large enough. If the value specified is smaller than
the requirements for the program, the required value is used.
- The default value for the HEAP runtime option is HEAP(12K,4K,ANY,FREE).
- When you are running a service routine, you should with #pragma runopts(TRAP(OFF)).
- Exception handling is not supported in a persistent environment.
- Invoking the system()
function from an atexit() function results
in undefined behavior.
- When using the atexit() function from a persistent environment,
the atexit list will not be run until the persistent environment has
been terminated by the __xhott() library function. For more information
about this function, see __xhott() — Terminate a Persistent C Environment.
- Calls to math library functions can be made in a system programming
C environment using the dynamic library. For the most efficient use
of calls to math library functions, you should enclose the function
name in parentheses (). For example, if you make a call to sin(),
use:
z = (sin)(x);
- You cannot call ctrace(), csnap(), cdump(), or ctest() because
they rely on z/OS® Language Environment® callable services.
- System programming C environments are disjointed from each other;
that is, memory files cannot be passed and file control is not maintained
across environments. Thus, memory files cannot be passed between a
C program and a callee that is written as an assembler exit.
An
exception is between environments where the target environment is
built with EDCXSTRL or EDCXSTRX but does not
represent a server. For example, if a C program invokes a freestanding
SPC application that is not a server by using system(), a memory file
can be passed successfully between the programs.
- When developing an application with an interface with assembler,
you can use the DSECT Conversion Utility to build structures mapping
to the data types of your DSECTs.
- The POSIX locale features and coded character set conversion routines
are supported only for system programming applications that use z/OS Language
Environment.
They are not available for freestanding applications.
- IEEE decimal floating-point data types are not supported for the
function sprintf() under SPC. If you need to use IEEE decimal floating-point
data types, you must use the C/C++ Run Time Library version of the
sprintf() function.