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]