Changes the current line number and file name in the preprocessor.
Contents |
#linelineno | (1) | ||||||||
#linelineno"filename" | (2) | ||||||||
Any preprocessing tokens (macro constants or expressions) are permitted as arguments to#line as long as they expand to a valid decimal integer optionally following a valid character string.
lineno must be a sequence of at least one decimal digit (the program is ill-formed, otherwise) and is always interpreted as decimal (even if it starts with0).
Iflineno is0 or greater than32767(until C99)2147483647(since C99), the behavior is undefined.
This directive is used by some automatic code generation tools which produce C source files from a file written in another language. In that case,#line directives may be inserted in the generated C file referencing line numbers and the file name of the original (human-editable) source file.
The line number following the directive#line __LINE__ is unspecified (there are two possible values that__LINE__ can expand to in this case: number of endlines seen so far, or number of endlines seen so far plus the endline that ends the#line directive). This is the result ofDR 464, which applies retroactively.
#include <assert.h>#define FNAME "test.c"int main(void){#line 777 FNAMEassert(2+2==5);}
Possible output:
test: test.c:777: int main(): Assertion `2+2 == 5' failed.
C++ documentation forFilename and line information |