Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

MODIFY-SOURCE-PROPERTIES

&pagelevel(5)&pagelevel

Alias:         SET-SOURCE-PROPERTIES

This statement can be used to define the properties of a source program and to control the behavior of the preprocessor and the C and C++ frontends.

MODIFY-SOURCE-PROPERTIES

/* Options to select the language mode */

LANGUAGE= *UNCHANGED / *C(...) / *CPLUSPLUS(...)


*C(...)



|

MODE= *UNCHANGED / *LATEST / *1990 / *2011 / 






*KERNIGHAN-RITCHIE



|

STRICT = *UNCHANGED / *NO / *YES


*CPLUSPLUS(...)




MODE= *UNCHANGED / *LATEST / *2017 / *2020 /






*V2-COMPATIBLE / *V3-COMPATIBLE



|

STRICT = *UNCHANGED / *NO / *YES

/* Preprocessor options */

,DEFINE= *NONE / *UNCHANGED / list-poss: <c-string 1..125 with-low> / <name 1..125 with-under> /





*SUBSTITUTE(...)


*SUBSTITUTE(...)



|

IDENTIFIER= <c-string 1..125 with-low> / <name 1..125 with-under>



|

,TOKEN-STRING= <c-string 1..125 with-low> / <name 1..125 with-under>

,UNDEFINE= *NONE / *UNCHANGED / *ALL / list-poss: <c-string 1..125 with-low> /






<name 1..125 with-under> /

,ASSERT= *NONE / *UNCHANGED / list-poss: *SUBSTITUTE(...)


*SUBSTITUTE(...)



|

IDENTIFIER= <c-string 1..125 with-low> / <name 1..125 with-under>



|

,TOKEN-STRING= <c-string 1..125 with-low> / <name 1..125 with-under>

,PREINCLUDE= *UNCHANGED / *NONE / <c-string 1..1024 with-low>

,COMMENTS= *UNCHANGED / *YES / *NO

,PREPROCESSING-MODE= *UNCHANGED / *ANSI / *KR

,IMPLICIT-INCLUDE= *UNCHANGED / *YES / *NO

/* Common frontend options in C and C++ */

,SIGNED-CHARACTER= *UNCHANGED / *YES / *NO

,AT-ALLOWED= *UNCHANGED / *YES / *NO

,DOLLAR-ALLOWED= *UNCHANGED / *YES / *NO

,ENUM-TYPE= *UNCHANGED / *VALUE-DEPENDENT / *LONG

,SIGNED-FIELDS= *UNCHANGED / *SIGNED / *UNSIGNED

,PLAIN-FIELDS= *UNCHANGED / *SIGNED / *UNSIGNED

,PRESERVING= *UNCHANGED / *UNSIGNED / *LONG

,ALTERNATIVE-TOKENS= *UNCHANGED / *YES / *NO

,EXTERNAL-DEFINITION= *UNCHANGED / *BY-SOURCE-LANGUAGE / *UNIQUE /





*MULTIPLY-ALLOWED

,LONGLONG= *UNCHANGED / *YES / *NO

,END-OF-LINE-COMMENTS= *UNCHANGED / *YES / *NO

,LITERAL-ENCODING= *UNCHANGED / *NATIVE / *ASCII / *ASCII-FULL / *EBCDIC / *EBCDIC-FULL

/* C++ specific options */

,INSTANTIATION= *UNCHANGED / *NONE / *AUTO / *LOCAL / *ALL

,USE-STD-NAMESPACE= *UNCHANGED / *YES / *NO

,USE-STD-NAMESPACE= *UNCHANGED / *YES / *NO

,KEYWORD-BOOL= *UNCHANGED / *YES / *NO

,KEYWORD-WCHAR= *UNCHANGED / *YES / *NO

,LOOP-INIT= *UNCHANGED / *OLD / *NEW

,SPECIALIZATION= *UNCHANGED / *OLD / *NEW

Options to select the language mode

LANGUAGE =
This option specifies in which programming language (C or C++) the sources to be compiled were written.
The default setting of the compiler is LANGUAGE=*CPLUSPLUS(MODE=*LATEST, STRICT=*NO).

LANGUAGE = *C(...)
The source program is a C program.

MODE = *UNCHANGED / *LATEST / *1990 / *2011 / *KERNIGHAN-RITCHIE

The operand MODE determines the language mode:

*UNCHANGED:

The value specified in the last MODIFY-SOURCE-PROPERTIES statement with LANGUAGE=*C applies.

*LATEST:

This is a short cut for latest supported standard. It is the default setting. It is currently mapped to *2011. This mapping might change in a future compiler version.

*1990:

C89 mode
The compiler supports C code, as defined in the ANSI-/ISO-C standard from 1990. The same standard is also known as ANSI C89.
This value corresponds to the specification *ANSI resp. *STRICT-ANSI of the C/C++ V3 compiler.

__STDC_VERSION__ has the value 199409L.

*2011:

C11 mode
The compiler supports C code, as defined in the C-standard of 2011.
__STDC_VERSION__ has the value 201112L.

*KERNIGHAN-RITCHIE:

K&R-C-mode
The compiler accepts C code, as defined by Kernighan&Ritchie in the reference manual ("The C Programming Language", First Edition). It also supports C language elements of the ANSI C standard that are semantically identical to the Kernighan&Ritchie "definition" of the C language (e.g. function prototypes, const, volatile). This simplifies the conversion of a K&R C source to ANSI C. All C library functions of the CRTE (i.e. ANSI functions, POSIX and X/OPEN functions, UNIX extensions) are available for use.
As far as the preprocessor behavior is concerned, ANSI/ISO C is the default. If desired, the option PREPROCESSING-MODE=*KR can be specified to convert the preprocessor behavior to K&R C (as required when porting old C sources from a UNIX system, for example).

__STDC_VERSION__ is not defined. The operand STRICT has no effect, i.e. STRICT=*NO always applies.

STRICT = *UNCHANGED / *NO / *YES
*NO:

Some required diagnostics are omitted, the name space is not restricted to names that are specified by the standard and some extensions are included.
__STDC__ has the value 0, _STRICT_STDC is not defined.

*YES:

The namespace is restricted to the names defined in the standard, and only the C library functions defined in the ANSI/ISO standard are available. Certain extensions (such as the asm keyword) and some commonly expected header file declarations are not available

Deviations from the standard result in compiler messages (mostly warnings). If desired, the output of errors can be forced in such cases by specifying the option ANSI-VIOLATIONS=*ERROR (see "MODIFY-DIAGNOSTIC-PROPERTIES").

__STDC__ has the value 1, _STRICT_STDC is defined.

LANGUAGE = *CPLUSPLUS(...)
The source program is a C++ program. This is also the default setting of the compiler before the programming language is defined for the first time with the LANGUAGE option.

MODE = *UNCHANGED / *LATEST / *2017 / *2020 / *V2-COMPATIBLE / *V3-COMPATIBLE
The operand MODE determines the language mode:

*UNCHANGED:

The value specified in the last MODIFY-SOURCE-PROPERTIES statement with LANGUAGE=*CPLUSPLUS applies.

*LATEST:

This is a short cut for latest supported standard. It is the default setting. It is currently mapped to *2020. This mapping might change in a future compiler version.

*2017:

C++ 2017 mode
The compiler supports C++ code, as defined in the C++-standard of 2017.
__cplusplus has the value 201703L and __STDC_VERSION__ the value 199409L.

*2020:

C++ 2020 mode
The compiler supports C++ code, as defined in the C++-standard of 2020. Full C++ 2020 library support is currently not available and instead the existing C++ 2017 library is used.
__cplusplus has the value 202002L and __STDC_VERSION__ the value 199409L.

*V2-COMPATIBLE:

Cfront-C++ mode
The compiler supports the C++ language elements of Cfront V3.0.3. Cfront V3.0.3 was first released with the C++ compiler V2.1.
The Cfront compatible C++ library with complex math and stream-oriented I/O is available.
More information on the Cfront C++ library can be found in the section “The Cfront C++library”.
C++ sources must be compiled with MODE=*V2-COMPATIBLE if their modules are to be linkable with C++ V2.1/V2.2 modules.

This value corresponds to the specification *CPP of the C/C++ V3 compiler.

__cplusplus has the value 1 and __STDC_VERSION__ the value 199409L. The operand STRICT has no effect, i.e. STRICT=*NO always applies.

*V3-COMPATIBLE:

C++ V3 mode
The compiler supports C++ code like the C/C++ compiler version 3.2.

This value corresponds to the specification *ANSI resp. *STRICT-ANSI of the C/C++ V3 compiler.

__cplusplus has the value 2 (if STRICT=*NO) resp. 199612L (if STRICT=*YES) and  __STDC_VERSION__ has the value 199409L.

STRICT = *UNCHANGED / *NO / *YES

*NO:

Some required diagnostics are omitted, the name space is not restricted to names that are specified by the standard and some extensions are included.
__STDC__ has the value 0, _STRICT_STDC is not defined.

*YES:

The namespace is restricted to the names defined in the standard, and only the C library functions defined in the ANSI/ISO standard are available. Certain extensions (such as the asm keyword) and some commonly expected header file declarations (stdio.h, stdlib.h etc.) are not available.

Deviations from the standard result in compiler messages (mostly warnings). If desired, the output of errors can be forced in such cases by specifying the option ANSI-VIOLATIONS=*ERROR (see "MODIFY-DIAGNOSTIC-PROPERTIES").

__STDC__ has the value 1, _STRICT_STDC is defined.

Preprocessor options

DEFINE = *NONE
Only the names and values that are specified by #define directives in the program or are predefined by the compiler are considered valid for the current compiler run.

DEFINE = *UNCHANGED
The values specified in the last MODIFY-SOURCE-PROPERTIES statement apply.

DEFINE = <c-string 1..125 with-low> / <name 1..125 with-under>
<c-string> / <name> is used to define a name. This definition has the same effect as the following statement in a program:

#define name 1

Such names are queried in the program with, for example, the preprocessor directives #ifdef, #ifndef or #if defined(), #if ! defined(). See also the example below. When POSIX library functions are used, the _OSD_POSIX directive must be set before the occurrence of the first #include directive in the program. The easiest way to do this is by means of a definition at the time of compilation.

DEFINE = *SUBSTITUTE(...)
This substructure is used to define macros and symbolic constants (analogous to a #define directive for replacing text). See also the example below.

IDENTIFIER = <c-string 1..125 with-low> / <name 1..125 with-under>
<c-string> / <name> designates the name to be replaced in the source program by the value or text specified with TOKEN-STRING.

TOKEN-STRING = <c-string 1..125 with-low> / <name 1..125 with-under>
<c-string> / <name> specifies the value or text to be substituted in the source program for the name indicated by IDENTIFIER.

Note

If data in the DEFINE option is inconsistent with any #define directives in the source program, the entries in the source program will always be given precedence!

Example: DEFINE option

MODIFY-SOURCE-PROP DEFINE=('mch_file',DEBUG,_OSD_POSIX,*SUB('host',BS2000),*SUB(LAN,'C++'))

Values set with DEFINE must be enclosed in single quotes if they contain characters other than uppercase A to Z, the digits 0 to 9, or the special characters $, #, @, and _ (see also the table on "SDF notational conventions (C/C++-Compiler, #8)").

The above entries in the DEFINE option correspond to the following #define directives in the source program:

#define mch_file 1
#define DEBUG 1
#define _OSD_POSIX 1
#define host BS2000
#define LAN C++

UNDEFINE = *NONE
The DEFINE entries (see above) remain unmodified by default.

UNDEFINE = *UNCHANGED
The values specified in the last MODIFY-SOURCE-PROPERTIES statement apply.

UNDEFINE = *ALL
All DEFINE entries are deleted.

UNDEFINE = <c-string 1..125 with-low> / <name 1..125 with-under>

The names specified with DEFINE <c-string> / <name> are deleted.

ASSERT = *NONE / *UNCHANGED / list-poss: *SUBSTITUTE(...)
This option can be used to define an assertion, as if by a preprocessor #assert directive (see "Extensions to ANSI/ISO C ").

ASSERT= *SUBSTITUTE(...)

IDENTIFIER = <c-string 1..125 with-low> / <name 1..125 with-under>

<c-string> / <name> designates the name of the assertion.

TOKEN-STRING = <c-string 1..125 with-low> / <name 1..125 with-under>
<c-string> / <name> specifies the value or text to be substituted for the assertion designated by IDENTIFIER.

PREINCLUDE = *UNCHANGED / *NONE / <c-string 1..1024 with-low>
The pre-include option specifies an include file which is to be included at the start of the source program via an imaginary #include statement. The preprocessor searches for this include file in the USER-INCLUDE paths.

The include file specified via the PREINCLUDE option will be handled like an include file which is specified inside an #include statement at the beginning of the source program.

If several include files are to be pre-included then the corresponding #include statements should be collected together in a single include file and this include file should then be specified via the PREINCLUDE option.

COMMENTS = *UNCHANGED / *YES / *NO
This option can be used to specify whether the expanded and recompilable source program created by the preprocessor may also contain comments.

PREPROCESSING-MODE = *UNCHANGED / *ANSI / *KR

*UNCHANGED

The values specified in the last MODIFY-SOURCE-PROPERTIES statement apply.

*ANSI

This is the default setting in all C and C++ language modes of the compiler. Inother words, preprocessor behavior in accordance with the ANSI/ISO C standard is also supported in the K&R C mode by default.

*KR

The obsolete preprocessor behavior based on Reiser ́s cpp and Johnson ́s pcc can be turned on with *KR.

IMPLICIT-INCLUDE = *UNCHANGED / *YES / *NO
This option only affects C++ templates. It determines whether or not the definition of a template is included implicitly (see the section “Implicit inclusion”).

Common frontend options in C and C++

SIGNED-CHARACTER = *UNCHANGED / *YES / *NO

*UNCHANGED

The values specified in the last MODIFY-SOURCE-PROPERTIES statement apply.

*NO: The data type char is unsigned by default.

*YES: char is treated as a signed char in expressions and conversions.Note that the use of this option may result in portability problems!

AT-ALLOWED = *UNCHANGED / *YES / *NO
Determines whether the "at" sign ’@’ is allowed (*YES) or not allowed (*NO) in names.

The Cfront-C++ library contains declarations with the “at” sign (@) (see "The standard C++ library (C/C++-Compiler, #120)").

DOLLAR-ALLOWED = *UNCHANGED / *YES / *NO
Determines whether the "dollar" sign ’$’ is allowed (*YES) or not allowed (*NO) in names.

ENUM-TYPE = *UNCHANGED / *VALUE-DEPENDENT / *LONG
This option controls the handling of enum data.

*UNCHANGED

The values specified in the last MODIFY-SOURCE-PROPERTIES statement apply.

*VALUE-DEPENDENT: depending on the range of values, enum data is represented as char, short, or long.

*LONG: enum data is always treated as objects of type long.

SIGNED-FIELDS = *UNCHANGED / *SIGNED / *UNSIGNED

*UNCHANGED

The values specified in the last MODIFY-SOURCE-PROPERTIES statement apply.

*SIGNED: By default, signed bit fields are treated as signed.

*UNSIGNED: signed bit fields are always interpreted as unsigned. This option is only offered for compatibility reasons with older C versions and is only meaningful in K&R C mode.

PLAIN-FIELDS = *UNCHANGED / *SIGNED / *UNSIGNED
This option controls whether integer bit fields (short, int, long) are treated as signed (*SIGNED) or unsigned (*UNSIGNED) types. signed is the default.

PRESERVING = *UNCHANGED / *UNSIGNED / *LONG
This option controls whether arithmetic operations with operands of type long and unsigned int return a result of type long (*LONG) in accordance with K&R mode (first edition; see section 6.6 in the appendix) or of type unsigned long (*UNSIGNED) in accordance with ANSI/ISO C.

ALTERNATIVE-TOKENS = *UNCHANGED / *YES / *NO

This option controls whether alternative tokens are to be recognized by the compiler.This includes:

  • digraph sequences (e.g. <: for [) in the C and C++ modes and

  • additional keywords for operators (e.g. and for &&, bitand for &), which are only valid in the C++ language mode.

*YES is the default for the modes C11, C++ V3, C++ 2017 and C++2020.
*NO is the default for all other modes.

EXTERNAL-DEFINITION =
This option controls how the compiler reserves memory for the externally visible variables of a module. This is important if the program consists of several modules that are to be subsequently linked into an object program.

EXTERNAL-DEFINITION = *UNCHANGED
The values specified in the last MODIFY-SOURCE-PROPERTIES statement apply.

EXTERNAL-DEFINITION = *BY-SOURCE-LANGUAGE
The value of the EXTERNAL-DEFINITION option depends on the information in the language mode options:

LANGUAGE=*C(MODE=*KERNIGHAN-RITCHIE): MULTIPLY-ALLOWED
LANGUAGE=*C(MODE=*1990/*2011): UNIQUE
LANGUAGE=*CPLUSPLUS(): UNIQUE

EXTERNAL-DEFINITION = *UNIQUE
Externally visible variables may be defined in precisely one module only and must be declared in all other modules as extern. The memory space for such variables is set up in the data module of the object in which the variable has been defined. If the variable is defined in more than one module, an appropriate error message will be issued at the time of linking.

EXTERNAL-DEFINITION = *MULTIPLY-ALLOWED
This option is used for programs in which an externally visible variable is defined in more than one module, but is to be assigned to precisely one memory area. To achieve this, the variable must not be statically initialized in any definition. The compiler sets aside the memory for this variable in the COMMON area so that later, after linkage, only one memory area is assigned to the multiply defined variable.
If the variable is initialized statically in the definition, the memory area is created not in the COMMON area but in the data area. Assignment to precisely one memory area is then not possible!

This specification is not allowed in the C++ language modes.

LONGLONG = *UNCHANGED / *YES / *NO

This option determines whether the data type long long is recognized by the compiler.

*UNCHANGED

The values specified in the last MODIFY-SOURCE-PROPERTIES statement apply.

*YES

By default, the data type long long is recognized and the preprocessor define _LONGLONG is set.

*NO

The use of the data type long long results in an error. This setting is only allowed in strict C89 mode and strict C++ V3 mode.

END-OF-LINE-COMMENTS = *UNCHANGED / *YES / *NO

This option determines whether the compiler accepts C++ comments (//...) in C programs as well. C++ comments can only be allowed in the extended C89 mode (MODE=*1990, STRICT=*NO). They are not allowed in the other C modes (strict C89 and K&R) and are always valid in the C++ modes and in C11 mode.

*UNCHANGED

The values specified in the last MODIFY-SOURCE-PROPERTIES statement apply.

*YES

The compiler accepts C++ comments in extended C89 mode.

*NO

The compiler does not accepts C++ comments in extended C89 mode (default setting).

LITERAL-ENCODING = *UNCHANGED / *NATIVE / *ASCII / *ASCII-FULL / *EBCDIC / *EBCDIC-FULL
This option determines whether the C/C++ compiler object code for EBCDIC characters and EBCDIC literal strings creates characters and literal strings in EBCDIC or ASCII format (ISO 8859-1).

In C/C++, literal strings can contain binary coded characters as octal or hexadecimal escape sequences with the following syntax:

  • octal escape sequences:          \[0-7] [0-7] [0-7]

  • hexadecimal escape sequences:    \x[0-9A-F] [0-9A-F]

Whether or not the C/C++ compiler escape sequences are converted into ASCII format depends on the value specified for the option LITERAL-ENCODING = ... .

LITERAL-ENCODING = *UNCHANGED
The settings of the last MODIFY-SOURCE-PROPERTIES statement apply.

LITERAL-ENCODING = *NATIVE
The C/C++ compiler leaves the character and literal string code in the EBCDIC format, i.e. it transfers the characters and strings into the object code without converting them.
*NATIVE is the default setting.

LITERAL-ENCODING =*ASCII
The C/C++ compiler encodes the characters and literal strings in ASCII format. Escape sequences will not be converted into ASCII format.

LITERAL-ENCODING =*ASCII-FULL

The C/C++ compiler encodes the characters and literal strings in ASCII format. Escape sequences will be converted into ASCII format.

LITERAL-ENCODING =*EBCDIC
The C/C++ compiler leaves the character and literal string code in the EBCDIC format, i.e. it transfers the characters and strings into the object code without converting them.

LITERAL-ENCODING=*EBCDIC has the same effect as LITERAL-ENCODING=*EBCDIC-FULL or LITERAL-ENCODING=*NATIVE

LITERAL-ENCODING =*EBCDIC-FULL
The C/C++ compiler leaves the character and literal string code in the EBCDIC format, it transfers the characters and strings into the object code without converting them.

LITERAL-ENCODING=*EBCDIC-FULL has the same effect as LITERAL-ENCODING=*EBCDIC or LITERAL-ENCODING=*NATIVE

Requirements:

  • If your are using ASCII notation for characters and literal strings, you must not declare C library functions explicitly in your source program. C library functions should be declared indirectly by including the corresponding CRTE headers. Otherwise the compilation error ‘CFE1079[ERROR]..: Typangabe erwartet / expected a type specifier‘ can occur.

  • If you select the ASCII or ASCII_FULL options, you should note the following. For each and every CRTE function (C library function) in your program that works with characters or strings, you must use the corresponding or matching include file. If you do not do this, the CRTE functions will not be able to process the character strings correctly. You should ensure that you include the include file <stdio.h> for the function printf() with <stdio.h>.

    In the CRTE runtime environment, some C library functions work with ASCII character strings.

    If you are using ASCII character strings, you should specify the
    MODIFY-SOURCE-PROPERTIES statement as follows:

    MODIFY-SOURCE-PROPERTIES        -
       ...
       LITERAL-ENCODING=ASCII[-FULL]  -
       ...
    

    You must also specify the MODIFY-MODULE-PROPERTIES statement with the following entries:

    MODIFY-MODULE-PROPERTIES            -
       ...
       LOWER-CASE-NAMES=*YES,          -
       SPECIAL-CHARACTERS=*KEEP,       -
       ...
    

Caution:

C++ library functions do not support ASCII format and must therefore possibly be replaced by C functions.

C++ specific frontend options

INSTANTIATION = *UNCHANGED / *NONE / *AUTO / *LOCAL / *ALL
This option is only relevant in the language modes C++ V3, C++ 2017 and C++ 2020. It controls how templates with external linkage are instantiated. This includes function templates as well as (non-static and non-inline) functions and static variables that are members of template classes. These templates types are combined under the generic term "template entity" below.

All instantiations requested explicitly with the instantiation directive template declaration or with the instantiation pragma #pragma instantiate template-entity are always created by the compiler for each compilation unit in all instantiation modes.

The remaining template entities are instantiated as follows:

*NONE

No instantiations other than those requested explicitly are created.

*AUTO (default setting):

Instantiation is performed across all compilation units by means of a prelinker. This prelinker is activated with the BIND statement (see "BIND (C/C++-Compiler, #36)"). The principle of automatic instantiation is discussed in detail in the section “Automatic instantiation”.

*LOCAL:

Instantiations are created per compilation unit, i.e. all template entities that are used in a compilation unit are instantiated. The generated functions are given internal linkage. This mode provides a very simple mechanism for getting started with template programming. The compiler will instantiate the functions that are used in each compilation unit as local functions, and the program will link and run correctly. This method does, however, result in multiple copies of instantiated functions and is therefore not suitable for production use. Note that there may also be problems due to multiple copies of local static variables. For the same reasons, this method is also not suitable if one of the templates contains a static variable.

Warning:

The basic_string template contains a static variable in order to represent an empty string. If you use the *LOCAL option and the type string from the library, this empty string is no longer recognized. Try to avoid using this combination as it can lead to serious problems.

*ALL:

Instantiations are created per compilation unit, i.e. all template entities that are declared or referenced in a compilation unit are instantiated. All member functions and static variables of a template class are instantiated, regardless of whether or not they are used.
Template functions are instantiated even if they have only been declared.

USE-STD-NAMESPACE = *UNCHANGED / *YES / *NO
This option determines the use of C++ library functions for which names have been defined in the standard std namespace.

*YES is the default setting in extended C++ V3 mode. The compiler behaves as if the following lines were entered at the start of a compilation unit:

namespace std{}

using namespace std;

*NO is the default setting in strict C++ V3 mode, in mode C++ 2017 and in mode C++ 2020 and the only possible behavior in Cfront C++ mode.

If USE-STD-NAMESPACE=*NO is set in the mode C++ V3, C++ 2017 or C++ 2020, the source program must contain the statement using namespace std; otherwise, the names must be qualified appropriately before the first call to a C++ library function.

KEYWORD-BOOL = *UNCHANGED / *YES / *NO

This option can be used to define whether bool is recognized as a keyword.

*YES is the default behavior in mode C++ V3 and the only allowed behavior in mode C++ 2017 and C++ 2020. In this case, the preprocessor macro _BOOL is defined.

*NO is the default setting and the only possible behavior in the Cfront C++ mode.

KEYWORD-WCHAR = *UNCHANGED / *YES / *NO
This option can be used to define whether wchar_t is recognized as a keyword.

*YES is the default behavior in mode C++ V3 and the only allowed behavior in mode C++ 2017 and C++ 2020. In this case, the preprocessor macro _WCHAR_T is defined.

*NO is the default setting and the only possible behavior in the Cfront C++ mode.

LOOP-INIT = *UNCHANGED / *OLD / *NEW
This option defines how an initialization statement in for and while loops is to be treated.

*OLD is the default behavior in the Cfront-C++ mode and specifies that an initialization statement has the same scope as the entire loop.

*NEW is the default behavior in mode C++ V3 and the only allowed behavior in mode C++ 2017 and C++ 2020. It specifies the new ANSI C++-conformant scope rule, which surrounds the entire loop in its own implicitly generated scope.

SPECIALIZATION = *UNCHANGED / *OLD / *NEW
This option is only relevant in the modes C++ V3, C++ 2017 and C++ 2020. It is used to specify whether template specializations need the new syntax template<>.

*NEW is the default behavior in mode C++ V3 and the only allowed behavior in mode C++ 2017 and C++ 2020. In this case, the compiler does not define the macro __OLD_SPECIALIZATION_SYNTAX.

If *OLD is specified, the compiler implicitly defines the macro __OLD_SPECIALIZATION_SYNTAX with the value 1.