Additional Features of IBM XL C/C++ for z/VM

Table 1. IBM XL C/C++ for z/VM Features
Feature Explanation
long long Data Type The IBM® XL C/C++ for z/VM® compiler supports long long as a native data type when the compiler option LANGLVL(LONGLONG) is turned on. This option is turned on by default by the compiler option LANGLVL(EXTENDED).
Multibyte Character Support IBM XL C/C++ for z/VM supports multibyte characters for those national languages such as Japanese whose characters cannot be represented by a single byte.
Wide Character Support Multibyte characters can be normalized by z/VM C library functions and encoded in units of one length. These normalized characters are called wide characters. Conversions between multibyte and wide characters can be performed by string conversion functions such as wcstombs(), mbstowcs(), wcsrtombs(), and mbsrtowcs(), as well as the family of wide-character I/O functions. Wide-character data can be represented by the wchar_t data type.
Extended Precision Floating-Point Numbers IBM XL C/C++ for z/VM provides three S/390® floating-point number data types: single precision (32 bits), declared as float; double precision (64 bits), declared as double; and extended precision (128 bits), declared as long double .

Extended precision floating-point numbers give greater accuracy to mathematical calculations.

IBM XL C/C++ for z/VM also supports IEEE 754 floating-point representation. By default, float , double , and long double values are represented in IBM S/390 floating point format. However, the IEEE 754 floating-point representation is used if you specify the FLOAT(IEEE754) compile option. For details on this support, see the description of the FLOAT option in z/OS: XL C/C++ Programming Guide.

Command Line Redirection You can redirect the standard streams stdin , stderr, and stdout from the command line or when calling programs using the system() function.
National Language Support IBM XL C/C++ for z/VM provides message text in either American English or Japanese. You can dynamically switch between these two languages.
Locale Definition Support IBM XL C/C++ for z/VM provides a locale definition utility that supports the creation of separate files of internationalization data, or locales. Locales can be used at run time to customize the behavior of an application to national language, culture, and coded character set (code page) requirements. Locale-sensitive library functions, such as isdigit(), use this information.
Coded Character Set (Code Page) Support The IBM XL C/C++ for z/VM compiler can compiler C and C++ source written in different EBCDIC code pages. In addition, the iconv utility converts data or source from one code page to another.
Selected Built-in Library Functions Selected library functions, such as string and character functions, are built into the compiler to improve performance execution. Built-in functions are compiled into the executable, and no calls to the library are generated.
Multithreading Threads are efficient in applications that allow them to take advantage of any underlying parallelism available in the host environment. This underlying parallelism in the host can be exploited either by forking a process and creating a new address space, or by using multiple threads within a single process. For more information, see z/OS: XL C/C++ Programming Guide.
Packed Structures and Unions z/VM C provides support for packed structures and unions. Structures and unions may be packed to reduce the storage requirements of a z/VM C program or to define structures that are laid out according to COBOL or PL/I structure layout rules.
Fixed-point (Packed) Decimal Data z/VM C supports fixed-point (packed) decimal as a native data type for use in business applications. The packed data type is similar to the COBOL data type COMP-3 or the PL/I data type FIXED DEC , with up to 31 digits of precision.
Long Name Support For portability, external names can be mixed case and up to 1024 characters in length. For C++, the limit applies to the mangled version of the name.
System Calls You can call commands or executable modules using the system() function under CMS and OpenExtensions. You can also use the system() function to call execs in CMS or Shell scripts using OpenExtensions.
Exploitation of hardware Use the ARCHITECTURE compiler option to select the minimum level of machine architecture on which your program will run. ARCH(2) instructs the compiler to generate faster instruction sequences that are available only on newer machines. ARCH(3) also generates these faster instruction sequences and enables support for IEEE 754 Binary Floating-Point instructions. Code compiled with ARCH(2) runs on G2, G3, G4, and 2003 processors and code compiled with ARCH(3) runs on a G5 or G6 processor, and follow-on models.

Use the TUNE compiler option to optimize your application for a specific machine architecture. TUNE impacts performance only; it does not impact the processor model on which you will be able to run your application. TUNE(3) optimizes your application for the newer G4, G5, and G6 processors. TUNE(2) optimizes your application for other architectures. For more information, see the ARCHITECTURE and TUNE compiler information in XL C/C++ for z/VM: User's Guide.

Built-in Functions for Floating-Point and Other Hardware Instructions Use built-in functions for floating-point and other hardware instructions that are otherwise inaccessible to C and C++ programs. For more information, see z/OS: XL C/C++ Programming Guide.