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 :: whitespace#whitespacelinewhitespaceline-indicatorpp-new-line
line-indicator :: decimal-digitswhitespacefile-namedecimal-digitsdefault
file-name :: "file-name-characters"
file-name-characters :: file-name-characterfile-name-charactersfile-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]