HPUX stdsyms[5]






 stdsyms(5)                                                       stdsyms(5)





 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.

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

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

           o  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 (/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



 Hewlett-Packard Company            - 1 -     HP-UX Release 9.0: August 1992






 stdsyms(5)                                                       stdsyms(5)





                     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



 Hewlett-Packard Company            - 2 -     HP-UX Release 9.0: August 1992






 stdsyms(5)                                                       stdsyms(5)





                     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) or the C++ compiler, 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 C++
                     compiler.  Defining this macro enables the ANSI-C-style
                     function prototypes for increased type checking.  Note
                     that the C++ standard does not specify a namespace;
                     thus the default namespace for C++ is 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



 Hewlett-Packard Company            - 3 -     HP-UX Release 9.0: August 1992






 stdsyms(5)                                                       stdsyms(5)





                     (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 protoytpes are provided
                     when using this feature test macro.

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





















 Hewlett-Packard Company            - 4 -     HP-UX Release 9.0: August 1992