The standard predefined macros are specified by the relevant 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__
L
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. Depending on the language standard selected, the value of the macro is 199711L
, as mandated by the 1998 C++ standard; 201103L
, per the 2011 C++ standard; an unspecified value strictly larger than 201103L
for the experimental languages enabled by -std=c++1y
and -std=gnu++1y
. __OBJC__
__OBJC__
to test whether a header is compiled by a C compiler or an Objective-C compiler. __ASSEMBLER__
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-5.4.0/cpp/Standard-Predefined-Macros.html