Open System Services Porting Guide (G06.29+, H06.06+, J06.03+)
When defined, the identifiers required for executing in an OSS
environment are identified. The user does not explicitly define this macro,
it is defined when using the c89 or c99-Wsystype=oss flag.
_OSS_TARGET
When defined, macros that support only the C/POSIX locale are selected,
instead of internationalized functions that support multiple locales. The
macro _IGNORE_LOCALE affects functions in the ctype.h header file.
_IGNORE_LOCALE
NOTE: Beginning with the H06.24 and J06.13 RVUs, 64-bit OSS processes are supported and
additional feature test macros are provided to add support for 64-bit OSS processes. For information
about these changes, see the 64-Bit Support in OSS and Guardian chapter in the Open System
Services Programmer's Guide.
Predefined Preprocessor Symbols
The native and TNS C compilers provide three predefined preprocessor symbols: __TANDEM,
__INT32, and __XMEM. (Note that there are two underscores, “__”, at the beginning of these
three preprocessor symbol names.)
You can use __TANDEM to increase the portability of your C programs. (Enclose system-dependent
source text in #ifdef or #ifndef directives to test for the existence of __TANDEM.)
For the TNS environment, __INT32 (for int defined as 32 bits) is defined by the C compiler when
the WIDE pragma is present; __XMEM (for large memory model) is defined by the C compiler when
the XMEM pragma is present. For the native environments, these two symbols are always defined.
The TNS/R and TNS/E native C compilers also provide the _TNS_R_TARGET and _TNS_E_TARGET
predefined preprocessor symbols, respectively, which distinguish them from the TNS C compiler.
C Compiler Pragmas
The #pragma directive is used by C implementations to add preprocessor activities or provide
implementation-defined information to the compiler. The use of pragmas is completely
implementation-dependent. Pragmas are most often used in system header files. (You will rarely
need to add specific pragmas to your program.) Pragmas handle the interface to the routines
maintained in the system-wide library.
The following OSS C compiler pragmas are included:
Strict ISO/ANSI C syntax checking (only for G-series TNS C compiler)ANSICOMPLY
HP language extensions are allowed (only for native C compilers)EXTENSIONS
Odd-unstructured standard I/O filesANSISTREAMS
Attributes of external routinesFUNCTION
Target environment, OSS C compilers default to SYSTYPE OSSSYSTYPE
Data model (default value for SYSTYPE OSS)WIDE
Strict ISO/ANSI C syntax checking (only for native C compilers)NOEXTENSIONS
A complete list of all pragmas supported by HP can be found in the C/C++ Programmer’s Guide.
The compiler version and SYSTYPE setting determine the pragma defaults.
C Compiler Translation Limits
A C compiler that conforms to the ISO/ANSI C standard must indicate its translation limits. The
key translation limits and the guaranteed minimums for the NonStop TNS, TNS/R, and TNS/E C
compilers are contained in the C/C++ Programmer’s Guide.
The NonStop TNS, TNS/R, and TNS/E C compilers use dynamic data structures, so some program
components are limited by the amount of available memory. If the program you are porting to the
OSS C Programming Considerations 119