<p>A12.7. Генерация сообщения об ошибке</p>

Строка препроцессора вида

#error последовательность-лексемнеоб

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

<p>A12.8. Прагма</p>

Управляющая строка вида

#pragma последовательность-лексемнеоб

призывает препроцессор выполнить зависящие от реализации действия. Неопознанная прагма игнорируется.

<p>A12.9. Пустая директива</p>

Строка препроцессора вида

#

не вызывает никаких действий.

<p>A12.10. Заранее определенные имена</p>

Препроцессор "понимает" несколько заранее определенных идентификаторов; их он заменяет специальной информацией. Эти идентификаторы (и оператор препроцессора defined в том числе) нельзя повторно переопределять, к ним нельзя также применять директиву #undef. Это следующие идентификаторы:

__LINE__ Номер текущей строки исходного текста, десятичная константа.

__FILE__ Имя компилируемого файла, строка.

__DATE__ Дата компиляции в виде "MMM DD YYYY",строка.

__TIME__ Время компиляции в виде "hh:mm:ss", строка.

__STDC__ Константа 1. Предполагается, что этот идентификатор определен как 1

         только в тех реализациях, которые следуют стандарту.

Строки #error и #pragma впервые введены ANSI-стандартом. Заранее определенные макросы препроцессора также до сих пор не описывались, хотя и использовались в некоторых реализациях.

<p>A13. Грамматика</p>

Ниже приведены грамматические правила, которые мы уже рассматривали в данном приложении. Они имеют то же содержание, но даны в ином порядке.

Здесь не приводятся определения следующих символов-терминов: целая-константа, символьная-константа, константа-с-плавающей-точкой, идентификатор, строка и константа-перечисление. Слова, набранные обычным латинским шрифтом (не курсивом), и знаки рассматриваются как символы-термины и используются точно в том виде, как записаны. Данную грамматику можно механически трансформировать в текст, понятный системе автоматической генерации грамматического распознавателя. Для этого помимо добавления некоторых синтаксических пометок, предназначенных для указания альтернативных продукций, потребуется расшифровка конструкции со словами "один из" и дублирование каждой продукции, использующей символ с индексом необ., причем один вариант продукции должен быть написан с этим символом, а другой - без него. С одним изменением, а именно - удалением продукции typedef-имя:идентификатор и объявлением typedef-имени символом-термином, данная грамматика будет понятна генератору грамматического распознавателя YACC. Ей присуще лишь одно противоречие, вызываемое неоднозначностью конструкции if-else.

единица–трансляции:

    внешнее-объявление

    единица-трансляции внешнее-объявление

внешнее-объявление:

    определение-функции

    объявление

определение функции:

    спецификаторы-объявлениянеоб объявитель

    список-объявленийнеоб составная-инструкция

объявление:

    спецификаторы-объявления список-инициализаторов-объявителейнеоб

список-объявлений:

    объявление

    список-объявлений объявление

спецификаторы-объявления:

    спецификатор-класса-памяти спецификаторы-объявлениянеоб

    спецификатор-типа спецификаторы-объявлениянеоб

    квалификатор-типа спецификаторы-объявлениянеоб

спецификатор-класса-памяти: один из

    auto     register     static     extern     typedef

спецификатор-типа: один из

    void char short int long float double signed unsigned

    спецификатор-структуры-или-объединения

    спецификатор-перечисления

    typedef-имя

квалификатор-типа: один из

    const    volatile

спецификатор-структуры-или-объединения:

Перейти на страницу:
Нет соединения с сервером, попробуйте зайти чуть позже