The #line directive
A preprocessor line control directive supplies line numbers for compiler messages. It causes the compiler to view the line number of the next source line as the specified number.
#line directive syntax
In order for the compiler to produce meaningful references
to line numbers in preprocessed source, the preprocessor inserts #line
directives
where necessary (for example, at the beginning and after the end of
included text).
A file name specification enclosed in double quotation marks can follow the line number. If you specify a file name, the compiler views the next line as part of the specified file. If you do not specify a file name, the compiler views the next line as part of the current source file.
- A fully qualified sequential data set
- A fully qualified PDS or PDSE member
- A z/OS UNIX path name
#line
directive
matches the file contents. The compiler does not check this.In all C and C++ implementations,
the token sequence on a #line
directive is subject
to macro replacement. After macro replacement, the resulting character
sequence must consist of a decimal constant, optionally followed by
a file name enclosed in double quotation marks.
You can use #line
control directives
to make the compiler provide more meaningful error messages. The following
example program uses #line
control directives to
give each function an easily recognizable line number:
CCNRABD
/**
** This example illustrates #line directives.
**/
#include <stdio.h>
#define LINE200 200
int main(void)
{
func_1();
func_2();
}
#line 100
func_1()
{
printf("Func_1 - the current line number is %d\n",__LINE__);
}
#line LINE200
func_2()
{
printf("Func_2 - the current line number is %d\n",__LINE__);
}
Func_1 - the current line number is 102
Func_2 - the current line number is 202
In C++11, the increased
limit for #line directive from the C99 preprocessor are adopted to
provide a common preprocessor interface for C and C++ compilers. The
upper limit of #line <integer>
preprocessor
directives has been increased from 32,767 to 2,147,483,647 for the
C++ preprocessor in conformance with the C99 preprocessor. For more
information, see C99 preprocessor features adopted in C++11 (C++11).