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__
#include
or as the
input file name argument. For example,
"/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 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.
If GCC cannot determine the current date, it will emit a warning message
(once per compilation) and __DATE__
will expand to
"??? ?? ????"
.
__TIME__
"23:59:01"
.
If GCC cannot determine the current time, it will emit a warning message
(once per compilation) and __TIME__
will expand to
"??:??:??"
.
__STDC__
-traditional-cpp
option is used.
This macro is not defined if the -traditional-cpp
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. 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 Invocation.
__STDC_VERSION__
yyyy
mmL
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-cpp
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.