C# LANGUAGE SPECIFICATION
corresponds exactly to the lexical processing of a conditional compilation directive of the form:
#if true ... #endif
2.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.
Line directives are most commonly used in meta-programming tools that generate C# source code from some other text input.
pp-line: whitespaceopt # whitespaceopt line whitespace line-indicator pp-new-line
line-indicator: decimal-digits whitespace file-name decimal-digits default hidden
file-name: " file-name-characters "
file-name-characters: file-name-character file-name-characters file-name-character
file-name-character: Any input-character except "
When no #line directives are present, the compiler reports true line numbers and source file names in its output. The #line directive is most commonly used in meta-programming tools that generate C# source code from some other text input. 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.
A #line hidden directive has no effect on the file and line numbers reported in error messages, but does affect source level debugging. When debugging, all lines between a #line hidden directive and the subsequent #line directive (that is not #line hidden) have no line number information. When stepping through code in the debugger, these lines will be skipped entirely.
Note that a file-name differs from a regular string literal in that escape characters are not processed; the ‘\’ character simply designates an ordinary backslash character within a file-name.
52Copyright Microsoft Corporation 1999-2003. All Rights Reserved.