3.7.1 Standard Predefined Macros
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.
- 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.
- 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.
__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
fprintf (stderr, "Internal error: " "negative string length " "%d at %s, line %d.", length, __FILE__, __LINE__);
An #include directive changes the expansions of
__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
__LINE__ revert to the values they had before the
__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.
__func__, and GCC has provided
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
- 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.
If GCC cannot determine the current date, it will emit a warning message (once per compilation) and
__DATE__will expand to
"??? ?? ????".
- 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
If GCC cannot determine the current time, it will emit a warning message (once per compilation) and
__TIME__will expand to
- 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-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.
- This macro expands to the C Standard's version number, a long integer
constant of the form yyyymm
Lwhere 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.
199409Lsignifies the 1989 C standard as amended in 1994, which is the current default; the value
199901Lsignifies 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.
- 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.
- This macro is defined when the C++ compiler is in use. You can use
__cplusplusto 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
1instead. It is hoped to complete the implementation of standard C++ in the near future.
- This macro is defined, with value 1, when the Objective-C compiler is in
use. You can use
__OBJC__to test whether a header is compiled by a C compiler or a Objective-C compiler.
- This macro is defined with value 1 when preprocessing assembly language.