The DEFAULT option specifies defaults for attributes and options. These defaults are applied only when the attributes or options are not specified or implied in the source.
>>-DEFAULT--(---------------------------------------------------> >--+------------------------------------------------+--)------->< | .-+---+--------------------------------------. | | | '-,-' | | | V .-IBM-. | | '---+-+-ANS-+--------------------------------+-+-' | .-EBCDIC-. | +-+-ASCII--+-----------------------------+ | .-ASSIGNABLE----. | +-+-NONASSIGNABLE-+----------------------+ | .-BYADDR--. | +-+-BYVALUE-+----------------------------+ | .-NONCONNECTED-. | +-+-CONNECTED----+-----------------------+ | .-DESCRIPTOR---. | +-+-NODESCRIPTOR-+-----------------------+ | .-NATIVE----. | +-+-NONNATIVE-+--------------------------+ | .-NATIVEADDR----. | +-+-NONNATIVEADDR-+----------------------+ | .-NOINLINE-. | +-+-INLINE---+---------------------------+ | .-ORDER---. | +-+-REORDER-+----------------------------+ | .-OPTLINK----. | +-LINKAGE--(--+-+--------+-+--)----------+ | '-SYSTEM-' | | .-EVENDEC---. | +-+-NOEVENDEC-+--------------------------+ | .-NULL370-. | +-+-NULLSYS-+----------------------------+ | .-BIN1ARG---. | +-+-NOBIN1ARG-+--------------------------+ | .-NULLSTRADDR---. | +-+-NONULLSTRADDR-+----------------------+ | .-NONRECURSIVE-. | +-+-RECURSIVE----+-----------------------+ | .-DESCLOCATOR-. | +-+-DESCLIST----+------------------------+ | .-BYADDR------. | +-RETURNS--(--+-+---------+-+--)---------+ | '-BYVALUE-' | | .-NOINITFILL-------------------------. | +-+-INITFILL--+----------------------+-+-+ | '-(----init_value----)-' | | .-HEXADEC--. | +-SHORT--(--+-+------+-+--)--------------+ | '-IEEE-' | | .-ALIGNED-------. | +-DUMMY--(--+-+-----------+-+--)---------+ | '-UNALIGNED-' | | .-UPPERINC-. | +-+-LOWERINC-+---------------------------+ | .-NORETCODE-. | +-+-RETCODE---+--------------------------+ | .-ALIGNED---. | +-+-UNALIGNED-+--------------------------+ | .-MIN-. | +-ORDINAL--(--+-MAX-+--)-----------------+ | .-NOOVERLAP-. | +-+-OVERLAP---+--------------------------+ | .-HEXADEC--. | +-+-+------+-+---------------------------+ | '-IEEE-' | | .-HEXADEC--. | '-E--(--+-+------+-+--)------------------' '-IEEE-'
ABBREVIATIONS: DFT, ASGN, NONASGN, NONCONN, CONN, INL, NOINL
| Attributes | DEFAULT(IBM) | DEFAULT(ANS) |
|---|---|---|
| FIXED DECIMAL | (5,0) | (10,0) |
| FIXED BINARY | (15,0) | (31,0) |
| FLOAT DECIMAL | (6) | (6) |
| FLOAT BINARY | (21) | (21) |
Under the IBM suboption, variables with names beginning from I to N default to FIXED BINARY and any other variables default to FLOAT DECIMAL. If you select the ANS suboption, the default for all variables is FIXED BINARY.
IBM is the default.
Specify ASCII only when compiling programs that depend on the ASCII character set collating sequence. Such a dependency exists, for example, if your program relies on the sorting sequence of digits or on lowercase and uppercase alphabetics. This dependency also exists in programs that create an uppercase alphabetic character by changing the state of the high-order bit.
'123'A is the same as '313233'X '123'E is the same as 'F1F2F3'X
EBCDIC is the default.
ASSIGNABLE is the default.
BYADDR is the default.
NONCONNECTED is the default.
DESCRIPTOR is the default.
You should specify NONNATIVE only to compile programs that depend on the nonnative format for holding these kind of variables.
If your program bases fixed binary variables on pointer or offset variables (or conversely, pointer or offset variables on fixed binary variables), specify either:
Other combinations produce unpredictable results.
NATIVE is the default.
If your program bases fixed binary variables on pointer or offset variables (or conversely, pointer or offset variables on fixed binary variables), specify either:
Other combinations produce unpredictable results.
NATIVEADDR is the default.
Specifying INLINE allows your code to run faster but, in some cases, also creates a larger executable file. For more information on how inlining can improve the performance of your application, see Improving performance.
NOINLINE is the default.
ORDER is the default.
LINKAGE(OPTLINK) should be used for all routines called by or calling to JAVA, and it should also be used for all routines called by or calling to C (unless the C code has been compiled with a non-default linkage).
LINKAGE(SYSTEM) should be used for all non-PL/I routines that expect the high-order bit to be on in the address of the last (and only the last) parameter.
LINKAGE(OPTLINK) is the default.
Under NOEVENDEC, the precision for any fixed decimal variable is rounded up to the next highest odd number.
If you specify EVENDEC and then assign 123 to a FIXED DEC(2) variable, the SIZE condition is raised. If you specify NOEVENDEC, the SIZE condition is not raised.
EVENDEC is the default.
Under BIN1ARG, the compiler will pass a FIXED BIN argument as is to an unprototyped function.
But under NOBIN1ARG, the compiler will assign any one-byte REAL FIXED BIN argument passed to an unprototyped function to a two-byte FIXED BIN temporary and pass that temporary instead.
Consider the following example:
dcl f1 ext entry; dcl f2 ext entry( fixed bin(15) ); call f1( 1b ); call f2( 1b );
If you specified DEFAULT(BIN1ARG), the compiler would pass the address of a one-byte FIXED BIN(1) argument to the routine f1 and the address of a two-byte FIXED BIN(15) argument to the routine f2. However, if you specified DEFAULT(NOBIN1ARG), the compiler would pass the address of a two-byte FIXED BIN(15) argument to both routines.
Note that if the routine f1 was a COBOL routine, passing a one-byte integer argument to it would cause problems since COBOL has no support for one-byte integers. In this case, using DEFAULT(NOBIN1ARG) might be helpful; but it would be better to specify the argument attributes in the entry declare.
BIN1ARG is the default.
Under NULLSTRADDR, when a null string is specified as an argument in an entry invocattion, the compiler will pass the address of an initialized piece of automatic storage. The is compatible with what the OS PL/I and PL/I for MVS compilers did.
But under NONULLSTRADDR, when a null string is specified as an argument in an entry invocattion, the compiler will pass a null pointer as the address of the argument. The is compatible with what early releases of the Enterprise PL/I compiler did.
NULLSTRADDR is the default.
NULL370 is the default.
NONRECURSIVE is the default.
If you specify DEFAULT(DESCLOCATOR), parameters requiring descriptors are passed using a locator or descriptor in the same way as previous releases of PL/I. This allows old code to continue to work even if it passed a structure from one routine to a routine that was expecting to receive a pointer.
The DFT(DESCLIST) option conflicts with the CMPAT(V*) options, and if it is specified with any of them, a message will be issued and the DFT(DESCLOCATOR) option assumed.
DESCLOCATOR is the default.
You should specify RETURNS(BYADDR) if your application contains ENTRY statements and the ENTRY statements or the containing procedure statement have the RETURNS option. You must also specify RETURNS(BYADDR) on the entry declarations for such entries.
RETURNS(BYADDR) is the default.
If you specify INITFILL with a hex value (nn), that value is used to initialize the storage used by all automatic variables in a block each time that block is entered. If you do not enter a hex value, the default is '00'.
Note that the hex value may be specified without or without quotes, but if it is specified with quotes, the string should not have an X suffix.
Under NOINITFILL, the storage used by an automatic variable may hold arbitrary bit patterns unless the variable is explicitly initialized.
INITFILL can cause programs to run significantly slower and should not be specified in production programs. However, the INITFILL option produces code that runs faster than the LE STORAGE option. Also, during program development, this option is very useful for detecting uninitialized automatic variables: a program that runs correctly with DFT(INITFILL('00')) and with DFT(INITFILL('ff')) probably has no uninitialized automatic variables.
NOINITFILL is the default.
SHORT (HEXADEC) is the default.
DUMMY(ALIGNED) indicates that a dummy argument should be created even if an argument differs from a parameter only in its alignment. DUMMY(UNALIGNED) indicates that no dummy argument should be created for a scalar (except a nonvarying bit) or an array of such scalars if it differs from a parameter only in its alignment.
Consider the following example:
dcl
1 a1 unaligned,
2 b1 fixed bin(31),
2 b2 fixed bin(15),
2 b3 fixed bin(31),
2 b4 fixed bin(15);
dcl x entry( fixed bin(31) );
call x( b3 );If you specified DEFAULT(DUMMY(ALIGNED)), a dummy argument would be created, while if you specified DEFAULT(DUMMY(UNALIGNED)), no dummy argument would be created.
DUMMY(ALIGNED) is the default.
Under z/OS UNIX, the include name is built using the extension '.inc'. So, for example, under the DFT(LOWERINC) option, the statement %INCLUDE STANDARD; will cause the compiler to try to include standard.inc. But, under the DFT(UPPERINC) option, the statement %INCLUDE STANDARD; will cause the compiler to try to include STANDARD.INC.
UPPERINC is the default.
If you specify NORETCODE, no special code is generated for procedures that do not have the RETURNS attribute.
NORETCODE is the default.
If you specify ALIGNED, all variables other than character, bit, graphic, and picture are given the ALIGNED attribute unless the UNALIGNED attribute is explicitly specified (possibly on a parent structure) or implied by a DEFAULT statement.
If you specify UNALIGNED, all variables are given the UNALIGNED attribute unless the ALIGNED attribute is explicitly specified (possibly on a parent structure) or implied by a DEFAULT statement.
ALIGNED is the default.
ORDINAL(MIN) is the default.
NOOVERLAP will produce code that performs better; however, if you use NOOVERLAP, you must insure that the source and target never overlap.
NOOVERLAP is the default.
Programs that communicate with JAVA should probably use the IEEE option, and programs that pass data to or receive data from platforms where IEEE is the default representation for floating-point data might also want to use the IEEE option.
HEXADEC is the default.
If you specify E(IEEE), 4 digits will be used for the exponent in E-format items.
If you specify E(HEXADEC), 2 digits will be used for the exponent in E-format items.
If DFT( E(HEXADEC) ) is specified, an attempt to use an expression whose exponent has an absolute value greater than 99 will cause the SIZE condition to be raised.
If the compiler option DFT(IEEE) is in effect, you should normally also use the option DFT( E(IEEE) ). However, under this option, some E format items that would be valid under DFT( E(HEXADEC) ) would not be valid. For instance, under DFT( E(IEEE) ), the statement "put skip edit(x) ( e(15,8));" would be flagged because the E format item is invalid.
E(HEXADEC) is the default.
Default: DEFAULT( IBM EBCDIC ASSIGNABLE BYADDR NONCONNECTED DESCRIPTOR NATIVE NATIVEADDR NOINLINE ORDER LINKAGE(OPTLINK) EVENDEC NOINITFILL UPPERINC NULL370 BIN1ARG NULLSTRADDR NONRECURSIVE DESCLOCATOR RETURNS(BYADDR) SHORT(HEXADEC) DUMMY(ALIGNED) NORETCODE ALIGNED ORDINAL(MIN) NOOVERLAP HEXADEC E(HEXADEC) )