GNU Info

Info Node: (cpp-300.info)Standard Predefined Macros

(cpp-300.info)Standard Predefined Macros


Next: Common Predefined Macros Up: Predefined Macros
Enter node , (file) or (file)node

Standard Predefined Macros
--------------------------

   The standard predefined macros are specified by the C and/or C++
language standards, so they are available with all compilers that
implement those standards.  Older compilers may not provide all of
them.  Their names all start with double underscores.

`__FILE__'
     This macro expands to the name of the current input file, in the
     form of a C string constant.  This is the path by which the
     preprocessor opened the file, not the short name specified in
     `#include' or as the input file name argument.  For example,
     `"/usr/local/include/myheader.h"' is a possible expansion of this
     macro.

`__LINE__'
     This macro expands to the current input line number, in the form
     of a decimal integer constant.  While we call it a predefined
     macro, it's a pretty strange macro, since its "definition" changes
     with each new line of source code.

   `__FILE__' and `__LINE__' are useful in generating an error message
to report an inconsistency detected by the program; the message can
state the source line at which the inconsistency was detected.  For
example,

     fprintf (stderr, "Internal error: "
                      "negative string length "
                      "%d at %s, line %d.",
              length, __FILE__, __LINE__);

   An `#include' directive changes the expansions of `__FILE__' and
`__LINE__' to correspond to the included file.  At the end of that
file, when processing resumes on the input file that contained the
`#include' directive, the expansions of `__FILE__' and `__LINE__'
revert to the values they had before the `#include' (but `__LINE__' is
then incremented by one as processing moves to the line after the
`#include').

   A `#line' directive changes `__LINE__', and may change `__FILE__' as
well.  Note: Line Control.

   C99 introduces `__func__', and GCC has provided `__FUNCTION__' for a
long time.  Both of these are strings containing the name of the
current function (there are slight semantic differences; see the GCC
manual).  Neither of them is a macro; the preprocessor does not know the
name of the current function.  They tend to be useful in conjunction
with `__FILE__' and `__LINE__', though.

`__DATE__'
     This macro expands to a string constant that describes the date on
     which the preprocessor is being run.  The string constant contains
     eleven characters and looks like `"Feb 12 1996"'.  If the day of
     the month is less than 10, it is padded with a space on the left.

`__TIME__'
     This macro expands to a string constant that describes the time at
     which the preprocessor is being run.  The string constant contains
     eight characters and looks like `"23:59:01"'.

`__STDC__'
     In normal operation, this macro expands to the constant 1, to
     signify that this compiler conforms to ISO Standard C.  If GNU CPP
     is used with a compiler other than GCC, this is not necessarily
     true; however, the preprocessor always conforms to the standard,
     unless the `-traditional' option is used.

     This macro is not defined if the `-traditional' option is used.

     On some hosts, the system compiler uses a different convention,
     where `__STDC__' is normally 0, but is 1 if the user specifies
     strict conformance to the C Standard.  GNU CPP follows the host
     convention when processing system header files, but when
     processing user files `__STDC__' is always 1.  This has been
     reported to cause problems; for instance, some versions of Solaris
     provide X Windows headers that expect `__STDC__' to be either
     undefined or 1.  You may be able to work around this sort of
     problem by using an `-I' option to cancel treatment of those
     headers as system headers.  Note: Invocation.

`__STDC_VERSION__'
     This macro expands to the C Standard's version number, a long
     integer constant of the form `YYYYMML' where YYYY and MM are the
     year and month of the Standard version.  This signifies which
     version of the C Standard the compiler conforms to.  Like
     `__STDC__', this is not necessarily accurate for the entire
     implementation, unless GNU CPP is being used with GCC.

     The value `199409L' signifies the 1989 C standard as amended in
     1994, which is the current default; the value `199901L' signifies
     the 1999 revision of the C standard.  Support for the 1999
     revision is not yet complete.

     This macro is not defined if the `-traditional' option is used, nor
     when compiling C++ or Objective-C.

`__STDC_HOSTED__'
     This macro is defined, with value 1, if the compiler's target is a
     "hosted environment".  A hosted environment has the complete
     facilities of the standard C library available.

`__cplusplus'
     This macro is defined when the C++ compiler is in use.  You can use
     `__cplusplus' to test whether a header is compiled by a C compiler
     or a C++ compiler.  This macro is similar to `__STDC_VERSION__', in
     that it expands to a version number.  A fully conforming
     implementation of the 1998 C++ standard will define this macro to
     `199711L'.  The GNU C++ compiler is not yet fully conforming, so
     it uses `1' instead.  We hope to complete our implementation in
     the near future.


automatically generated by info2www version 1.2.2.9