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

2.5.1Символы условной компиляции

Функциональность условной компиляции, предоставляемая директивами #if, #elif, #else и #endif, управляется посредством препроцессорных выражений (§2.5.2) и символов условной компиляции.

условный_символ: любой идентификатор_или_ключевое_слово, за исключением true и false

У символа условной компиляции есть два возможных состояния: определенное и неопределенное. В начале лексической обработки исходного файла символ условной компиляции не определен, если только он явным образом не определен внешним механизмом (таким как параметр командной строки компилятора). При обработке директивы #define символ условной компиляции, упомянутый в этой директиве, становится определенным в этом исходном файле. Этот символ остается определенным, пока не будет обработана директива #undef для того же самого символа, или пока не будет достигнут конец исходного файла. Это означает, что директивы #define и #undef в одном исходном файле не влияют на другие исходные файлы той же программы.

При ссылке в препроцессорном выражении определенный символ условной компиляции имеет логическое значение true, а неопределенный — логическое значение false. Символы условной компиляции не обязательно должны быть явно объявлены, чтобы на них можно было ссылаться в препроцессорных выражениях. Необъявленные символы просто являются неопределенными и имеют, таким образом, значение false.

Пространство имен для символов условной компиляции отличается и является отдельным от всех других именованных сущностей в программе на C#. На символы условной компиляции можно ссылаться только в директивах #define и #undef и в препроцессорных выражениях.

2.5.2Препроцессорные выражения

Препроцессорные выражения могут быть в директивах #if и #elif. В препроцессорных выражениях разрешены операторы !, ==, !=, && и ||, для группирования можно использовать скобки.

ПП_выражение: пробелнеобязательно ПП_выражение_ИЛИ пробелнеобязательно

ПП_выражение_ИЛИ: ПП_выражение_И ПП_выражение_ИЛИ пробелнеобязательно || пробелнеобязательно ПП_выражение_И

ПП_выражение_И: ПП_выражение_равенства ПП_выражение_И пробелнеобязательно && пробелнеобязательно ПП_выражение_равенства

ПП_выражение_равенства: ПП_унарное_выражение ПП_выражение_равенства пробелнеобязательно == пробелнеобязательно ПП_унарное_выражение ПП_выражение_равенства пробелнеобязательно != пробелнеобязательно ПП_унарное_выражение

ПП_унарное_выражение: ПП_первичное_выражение ! пробелнеобязательно ПП_унарное_выражение

ПП_первичное_выражение: true false символ_условной_компиляции ( пробелнеобязательно ПП_выражение пробелнеобязательно )

При ссылке в препроцессорном выражении определенный символ условной компиляции имеет логическое значение true, а неопределенный — логическое значение false.

Вычисление препроцессорного выражения всегда дает логическое значение. Правила вычисления для препроцессорного выражения такие же, как для константного выражения (§7.19), с тем исключением, что единственные определенные пользователем сущности, на которые можно ссылаться, — это символы условной компиляции.

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