Every name in a PL/I program requires a complete set of attributes. Arguments passed to a procedure must have attributes matching the procedure’s parameters. Values returned by functions must have the attributes expected. However, the attributes that you specify need rarely include the complete set of attributes.
The set of attributes for:
can be completed by using the language-specified defaults, or by defaults that you can define (using the DEFAULT statement) either to modify the language-specified defaults or to develop a completely new set of defaults.
Attributes applied by default cannot override attributes applied to a name by explicit or contextual declaration.