HPlogo HP-UX Reference Volume 5 of 5 > s

stdsyms(5)

» 

Technical documentation

Complete book in PDF

 » Table of Contents

 » Index

NAME

stdsyms — description of HP-UX header file organization

DESCRIPTION

HP-UX header files are organized in a manner that allows for only a subset of the symbols available in that header file to be visible to an application that conforms to a specific standard. The ANSI-C, POSIX.1, POSIX.2, and XPG4 standards each reserve a certain set of symbols for that standard's namespace. In addition, the HP-UX implementation of XPG3 and the "OSF AES/OS" provides for a clean namespace although this is not a specific requirement of those standards.

The following rules apply in determining what symbols are reserved for any standard. These symbols are reserved for the standard and for use by the implementation, and must be either avoided altogether, or used exactly as defined by the specified standard.

  • All symbols defined by the desired standard are reserved. Refer to the appropriate standards documentation for a complete list of reserved symbols.

  • All symbols beginning with an underscore followed by another underscore or an uppercase letter are reserved for the implementation.

  • All external identifiers beginning with an underscore are reserved for the implementation.

The following is a list of feature test macros which must be defined to obtain the appropriate namespace from the header files.

__STDC__

This symbol is automatically defined by the ANSI-C pre-processor (/opt/langtools/lib/cpp.ansi) and is automatically defined when specifying an ANSI-C compile (cc -Aa). Using the strict ANSI option -Aa requests a pure ANSI-C namespace, which is the smallest subset of the HP-UX namespace available. The -Aa option also enables the inclusion of ANSI-C-style function prototypes for increased type checking. Note that the default namespace when using the -Aa option is the ANSI-C namespace; therefore a broader namespace must be requested if it is desired.

_POSIX_SOURCE

As documented in the IEEE POSIX.1 standard, the programmer is required to define the _POSIX_SOURCE feature test macro to obtain the POSIX.1 namespace and POSIX.1 functionality. This feature test macro can be defined, either by using compiler options (-D_POSIX_SOURCE) or by using #define directives in the source files before any #include directives. Note that the default POSIX namespace is the POSIX.1-1990 namespace. It is necessary to define the _POSIX1_1988 feature test macro in addition to the _POSIX_SOURCE macro in order to obtain the POSIX.1-1988 namespace.

_POSIX_C_SOURCE

As documented in the IEEE POSIX.2 standard, the programmer is required to define the _POSIX_C_SOURCE feature test macro with a value of 2 to obtain the POSIX.1 and POSIX.2 namespaces and functionality. This feature test macro can be defined, either by using compiler options (-D_POSIX_C_SOURCE=2) or by using #define directives in the source files before any #include directives. This macro is also automatically defined in the XPG4 X/Open namespace (that is, whenever _XOPEN_SOURCE and _XPG4 are defined without defining _XPG2 or _XPG3).

_XOPEN_SOURCE

As documented in the XPG3 and XPG4 standards, the programmer is required to define the _XOPEN_SOURCE feature test macro to obtain X/Open functionality. This feature test macro can be defined, either by using compiler options (-D_XOPEN_SOURCE) or by using #define directives in the source files before any #include directives. Although XPG3 does not specify any namespace pollution rules, XPG4 has instituted such rules. Therefore, the HP-UX operating system provides clean namespaces whenever _XOPEN_SOURCE is defined.

The current default X/Open namespace is that corresponding to XPG3. To request other versions of the X/Open namespace, define _XPG2 or _XPG4 in conjunction with _XOPEN_SOURCE.

_AES_SOURCE

As documented in the "OSF AES/OS" standard, the programmer is required to define the _AES_SOURCE feature test macro to obtain OSF functionality. This feature test macro can be defined, either by using compiler options (-D_AES_SOURCE) or by using #define directives in the source files before any #include directives. Although the AES does not specify any namespace pollution rules, the other standards have instituted such rules. Therefore HP-UX provideds a clean namespace whenever _AES_SOURCE is defined.

_HPUX_SOURCE

The programmer can define the _HPUX_SOURCE feature test macro to obtain the HP-UX namespace and complete HP-UX functionality. Note that the HP-UX namespace is currently a superset of all of the above mentioned namespaces. When using the compatibility-mode compiler (cc(1) without the -Aa option), the HP-UX namespace is provided by default. The programmer must request one of the other namespaces as described above to obtain the appropriate subset of the HP-UX namespace. When using the strict ANSI-C-mode compiler (cc -Aa), the programmer must specifically request a broader namespace.

The _HPUX_SOURCE feature test macro can be defined, either by using compiler options (-D_HPUX_SOURCE) or by using #define directives in the source files before any #include directives.

The following is a list of miscellaneous feature test macros that provide various additional features.

__cplusplus

This symbol is automatically defined by the HP C++ compiler. Defining this macro enables the C++ function prototypes in system header files.

The default namespace for HP C++ is the ANSI-C namespace. To obtain another namespace define the appropriate feature test macro.

HP C++ uses the ANSI-C preprocessor by default. To get the compatibility mode preprocessor, use the -Ac option to cc(1). The compatibility mode preprocessor uses the HP-UX namespace (_HPUX_SOURCE).

_POSIX1_1988

This feature test macro should be defined when the POSIX.1-1988 namespace is required. It should be used in conjunction with the _POSIX_SOURCE macro if the default POSIX.1-1990 namespace is not desired.

This macro is defined automatically whenever _AES_SOURCE or _XPG3 is requested.

_XPG2

The _XPG2 macro can be defined when using the compatibility-mode compiler to obtain XPG2 functionality. This provides XPG2 specified function declarations and macros in the HP-UX namespace. Note that the values obtained from most of the macros available when using this option are now available at run-time via the pathconf(), fpathconf(), and sysconf() system calls (see pathconf(2) and sysconf(2)). Use of the _XPG2 macro is strongly discouraged because it gives access to obsolete functionality. Note that no function prototypes are provided when using this feature test macro.

_XPG3

The _XPG3 feature test macro is defined automatically if the programmer has requested the XPG3 namespace (i.e., defined _XOPEN_SOURCE, but not some other conflicting namespace such as _XPG2 or _XPG4).

_XPG4

The _XPG4 feature test macro is provided so that the programmer can obtain the XPG4 namespace, since it differs slightly from the _XPG3 namespace. In order to obtain the XPG4 namespace, the programmer must define both the _XOPEN_SOURCE and _XPG4 feature test macros. The _XOPEN_SOURCE and _XPG4 feature test macros can be defined, either by using compiler options (-D_XOPEN_SOURCE -D_XPG4) or by using #define directives in the source files before any #include directives.

_SVID2

The _SVID2 macro can be defined when using the compatibility mode compiler to obtain SVID2 function return types in the HP-UX namespace. The default return types of many functions have since been changed in the HP-UX operating system to align with the ANSI-C, POSIX, X/Open, and OSF standards.

_CLASSIC_TYPES

The _CLASSIC_TYPES macro can be defined by the programmer to obtain pre-7.0 style function return types and structure element types. This macro has been provided only as a transition aid when migrating from the pre-7.0 version of HP-UX to standards-based HP-UX. Use of this macro is strongly discouraged as this functionality will be removed in a future release of HP-UX. Note that no function prototypes are provided when using this feature test macro.

SEE ALSO

cc(1), cpp(1), pathconf(2), sysconf(2).

© Hewlett-Packard Development Company, L.P.