Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharp Language Specification.doc
Скачиваний:
12
Добавлен:
26.09.2019
Размер:
4.75 Mб
Скачать

2.5.5Директивы диагностики

Директивы диагностики используются для явного создания сообщений об ошибках и предупреждениях, передаваемых тем же способом, что и другие ошибки и предупреждения времени компиляции.

ПП_диагностика: пробелнеоб # пробелнеоб error ПП_сообщение пробелнеоб # пробелнеоб warning ПП_сообщение

ПП_сообщение: новая_строка пробел входные_символынеобязательно новая_строка

В примере

#warning Code review needed before check-in

#if Debug && Retail #error A build can't be both debug and retail #endif

class Test {...}

в любом случае выдается предупреждение («Code review needed before check-in») и создается ошибка времени компиляции («A build can’t be both debug and retail»), если определены оба условных символа Debug и Retail. Обратите внимание, что ПП_сообщение может содержать произвольный текст; в частности, оно не должно содержать правильно сформированные лексемы; об этом свидетельствует использование одиночной кавычки в слове can’t.

2.5.6Директивы областей

Директивы областей используются для явного выделения областей исходного кода.

ПП_область: ПП_начальная_область раздел_условного_выражениянеобязательно ПП_конечная_область

ПП_начальная_область: пробелнеобязательно # пробелнеобязательно region ПП_сообщение

ПП_конечная_область: пробелнеобязательно # пробелнеобязательно endregion ПП_сообщение

В области не вложены семантические значения; области используют программисты и автоматические средства, чтобы пометить раздел исходного кода. Сообщение, указанное в директиве #region или #endregion, также не имеет семантического значения, оно служит только для идентификации области. В соответствующих директивах #region и #endregion могут быть разные ПРО_сообщения.

Лексическая обработка области

#region ... #endregion

точно соответствует лексической обработке директивы условной компиляции следующей формы:

#if true ... #endif

2.5.7Директивы строк

Директивы строк можно использовать для изменения номеров строк и имен исходных файлов, которые сообщаются в выводе компилятора, например в предупреждениях и ошибках.

Директивы строк обычно используются в средствах метапрограммирования, создающих исходный код на C# из другого текстового ввода.

ПП_строка: пробелнеоб # пробелнеоб line пробел индикатор_строки ПП_новая_строка

индикатор_строки: десятичные_цифры пробел имя_файла десятичные_цифры default hidden

имя_файла: " символы_имени_файла "

символы_имени_файла: символ_имени_файла символы_имени_файла символ_имени_файла

символ_имени_файла: Любой входной_знак за исключением "

При отсутствии директив #line компилятор сообщает в своем выводе настоящие номера строк и имена исходных файлов. При обработке директивы #line, содержащей индикатор_строки, не являющийся default, компилятор обрабатывает строку после этой директивы как строку с указанным номером (и именем файла, если оно указано).

Директива #line default отменяет действие всех предшествующих директив #line. Компилятор сообщает настоящие сведения о строках для последующих строк, как если бы директивы #line не обрабатывались.

Директива #line hidden не влияет на файл и номера строк, передаваемые в сообщениях об ошибках, но влияет на отладку на исходном уровне. При отладке все строки между директивой #line hidden и последующей директивой #line (не являющейся директивой #line hidden) не имеют сведений о номерах строк. При пошаговом выполнении кода в отладчике эти строки полностью пропускаются.

Обратите внимание, что имя_файла отличается от правильных строковых литералов тем, что escape-символы не обрабатываются; символ «\» просто означает обычный символ обратной косой черты в имени_файла.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]