9.5.7 Line directives
Line directives may be used to alter the line numbers and source file names
that are reported by the compiler in
output such as warnings and errors.
[Note: Line directives are most commonly used in meta-programming tools
that generate C# source code from
some other text input. end note]
pp-line::
whitespaceopt # whitespaceopt line whitespace line-indicator pp-new-line
line-indicator::
decimal-digits whitespace file-name
decimal-digits
default
file-name::
" file-name-characters "
file-name-characters::
file-name-character
file-name-characters file-name-character
file-name-character::
Any character except " (U+0022), and new-line
When no #line directives are present, the compiler reports true line
numbers and source file names in its output.
When processing a #line directive that includes a line-indicator that is
not default, the compiler treats the line
after the directive as having the given line number (and file name, if
specified).
A #line default directive reverses the effect of all preceding #line
directives. The compiler reports true line
information for subsequent lines, precisely as if no #line directives had
been processed.
[Note: Note that a file-name differs from a regular string literal in that
escape characters are not processed; the
.\. character simply designates an ordinary back-slash character within a
file-name. end note]