ECMA-334 C# Language Specification

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-character
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]