VMS Help CXX, Language Topics, Predefined Macros *Conan The Librarian |
The compiler defines the following macros and names. For more detailed information, see the HP C++ User's Guide for OpenVMS Systems. The * character following a name indicates that the name cannot be redefined or undefined. Macro Description _BOOL_EXISTS Indicates that bool is a type or keyword __BOOL_IS_A_RESERVED_WORD Indicates that bool is a keyword __DATE__ A string literal containing the date of the translation in the form Mmm dd yyyy, or Mmm d yyyy if the value of the date is less than 10 __FILE__ A string literal containing the name of the source file being compiled __IEEE_FLOAT Identifies floating-point format for compiling the program. The value is always 1 for HP Tru64 UNIX. __LINE__ A decimal constant containing the current line number in the C++ source file __PRAGMA_ENVIRONMENT Indicates that that the pragma environment directive is supported. __TIME__ A string literal containing the time of the translation in the form of hh:mm:ss _WCHAR_T Indicates that wchar_t is a keyword The following table lists names with a defined value of 1. Name Description __cplusplus Language identification name. __DECCXX Language identification name. __VMS System identification __vms System identification The compiler predefines __VMS; the C compiler predefines VMS and __VMS. Therefore, C++ programmers who plan to reuse code should check for __VMS. The compiler supports the following predefined macro names: Name Description __Alpha_AXP System identification name __ALPHA System identification name __alpha System identification name __32BITS Defined when pointers and data of type long are 32 bits on Alpha platforms The compiler predefines __32BITS when pointers and data of type long are 32 bits on Alpha platforms. On both UNIX and OpenVMS Alpha operating systems, programmers should use the predefined macro __alpha for code that is intended to be portable from one system to the other. Predefined macros (with the exception of vms_version, VMS_ VERSION, __vms_version, __VMS_VERSION, and __INITIAL_POINTER_ SIZE) are defined as 1 or 0, depending on the system (VAX or Alpha processor), the compiler defaults, and the qualifiers used. For example, if you compiled using G_FLOAT format, __D_FLOAT and __IEEE_FLOAT (Alpha processors only) are predefined to be 0, and __G_FLOAT is predefined as if the following were included before every compilation unit: #define __G_FLOAT 1 These macros can assist in writing code that executes conditionally. They can be used in #elif, #if, #ifdef, and #ifndef directives to separate portable and nonportable code in a C++ program. The vms_version, VMS_VERSION, __vms_version, and __VMS_VERSION macros are defined with the value of the OpenVMS version on which you are running (for example, Version 6.0). C++ automatically defines the following macros pertaining to the format of floating-point variables. You can use them to identify the format with which you are compiling your program. __D_FLOAT __G_FLOAT __IEEE_FLOAT _IEEE_FP __X_FLOAT The value of __X_FLOAT can be 0 or 1 depending on the floating point mode in effect. You can use the /FLOAT qualifier to change the mode. The following table lists predefined version string and version number macros. Name Description __VMS_VERSION Version identification __vms_version Version identification __DECCXX_VER Version identification __VMS_VER Version identification For example, the defined value of __VMS_VERSION on OpenVMS Version 6.1 is character string V6.1. You can use __DECCXX_VER to test that the current compiler version is newer than a particular version and __VMS_VER to test that the current OpenVMS Version is newer than a particular version. Newer versions of the compiler and the Openvms operating system always have larger values for these macros. If for any reason the version cannot be analyzed by the compiler, then the corresponding predefined macro is defined but has the value of 0. Releases of the compiler prior to Version 5.0 do not define these macros, so you can distinguish earlier compiler versions by checking to determine if the __DECCXX_VER macro is defined. The following example tests for C++ 5.1 or higher: #ifdef __DECCXX_VER #if __DECCXX_VER >= 50100000 / *Code */ #endif #endif The following tests for OpenVMS Version 6.2 or higher: #ifdef __VMS_VER #if __VMS_VER >= 60200000 /* code */ #endif #endif The following table shows the macro names for the listed command- line qualifiers. Command-line Option Macro Name /ASSUME=GLOBAL_ARRAY_NEW __GLOBAL_ARRAY_NEW /ASSUME=STDNEW __STDNEW /DEFINE=__FORCE_ __FORCE_INSTANTIATIONS INSTANTATIONS /EXCEPTIONS __EXCEPTIONS /IEEE_MODE _IEEE_FP /IMPLICIT_INCLUDE __IMPLICIT_INCLUDE_ENABLED /L_DOUBLE_SIZE __X_FLOAT /MODEL=ANSI __MODEL_ANSI /MODEL=ARM __MODEL_ARM /PURE_CNAME __PURE_CNAME, __HIDE_FORBIDDEN_NAMES /ROUNDING_MODE __BIASED_FLT_ROUNDS /RTTI __RTTI /STANDARD=RELAXED __STD_ANSI, __NOUSE_STD_IOSTREAM /STANDARD=ANSI __STD_ANSI, __NOUSE_STD_IOSTREAM /STANDARD=ARM __STD_ARM, __NOUSE_STD_IOSTREAM /STANDARD=GNU __STD_GNU, __NOUSE_STD_IOSTREAM /STANDARD=MS __STD_MS, __NOUSE_STD_IOSTREAM /STANDARD=STRICT_ANSI __STD_STRICT_ANSI, __USE_STD_IOSTREAM, __PURE_CNAME __HIDE_FORBIDDEN_NAMES /STANDARD=STRICT_ANSI __STD_STRICT_ANSI_ERRORS /WARNINGS=ANSI_ERRORS __PURE_CNAME, __HIDE_FORBIDDEN_NAMES /STANDARD=LATEST __STD_STRICT_ANSI, __USE_STD_IOSTREAM, __PURE_CNAME __HIDE_FORBIDDEN_NAMES /STANDARD=LATEST __STD_STRICT_ANSI_ERRORS /WARNINGS=ANSI_ERRORS __PURE_CNAME, __HIDE_FORBIDDEN_NAMES /USING=STD __IMPLICIT_USING_STD
|