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. *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.Created Mon Nov 8 17:42:11 2004 on tillpc with info_to_html version 0.9.6.