| www.delorie.com/gnu/docs/gcc/cpp_21.html | search |
![]() Buy the book! | |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
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__
"/usr/local/include/myheader.h" is a possible expansion of this
macro.
__LINE__
__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. See section 6. 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__
"Feb 12 1996". If the day of the
month is less than 10, it is padded with a space on the left.
__TIME__
"23:59:01".
__STDC__
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. See section 12. Invocation.
__STDC_VERSION__
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__
__cplusplus
__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.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
| webmaster donations bookstore | delorie software privacy |
| Copyright © 2003 by The Free Software Foundation | Updated Jun 2003 |