аддитивное-выражение
- мультипликативное-выражениемультипликативное-выражение
: выражение-приведенное-к-типу
мультипликативное-выражение
* выражение-приведенное-к-типу мультипликативное-выражение
/ выражение-приведенное-к-типу мультипликативное-выражение
% выражение-приведенное-к-типувыражение-приведенное-к-типу
: унарное-выражение
( имя-типа
) выражение-приведенное-к-типуунарное-выражение
: постфиксное –выражение
++ унарное-выражение
-- унарное-выражение
унарный-оператор выражение-приведенное-к-типу
sizeof унарное-выражение
sizeof( имя-типа
)унарный-оператор
: один из & * + - ~ !
постфиксное-выражение
: первичное-выражение
постфиксное-выражение
[ выражение ] постфиксное-выражение
( список-аргументов-выраженийнеоб ) постфиксное-выражение
, идентификатор постфиксное-выражение
-> идентификатор постфиксное-выражение
++ постфиксное-выражение
--первичное -выражение
: идентификатор
константа
строка
( выражение
)список-аргументов-выражений
: выражение-присваивания
список-аргументов-выражений
, выражение-присваиванияконстанта
: целая-константа
символьная-константа
константа-с-плавающей-точкой
константа-перечисление
Ниже приводится грамматика языка препроцессора в виде перечня структур управляющих строк. Для механического получения программы грамматического разбора она не годится. Грамматика включает символ текст
, который означает текст обычной программы, безусловные управляющие строки препроцессора и его законченные условные конструкции. управляющая-строка
: #define идентификатор последовательность-лексем
#define идентификатор
( идентификатор, ..., идентификатор) последовательность-лексем #undef идентификатор
#include <имя-файла
> #include "имя-файла
" #include последовательность-лексем
#line константа
"идентификатор" #line константа
#error последовательность-лексем
необ #pragma последовательность-лексем
необ #
условная-конструкция-препроцессора
условная-конструкция-препроцессора
: if-строка текст elif-части else-часть
необ #endifif-строка
: #if константное-выражение
#ifdef идентификатор
#ifndef идентификатор
elif-части
: elif-строка текст
elif-части
необelif-строка
: #elif константное-выражение
else-часть
: else-строка текст
else-строка
: #else
Приложение B. Стандартная библиотека
Настоящее приложение представляет собой краткое изложение библиотеки, утвержденной в качестве ANSI-стандарта. Сама по себе библиотека не является частью языка, однако, заложенный в ней набор функций, а также определений типов и макросов составляет системную среду, поддерживающую стандарт Си. Мы не приводим здесь несколько функций с ограниченной областью применения – те, которые легко синтезируются из других функций, а также опускаем все то, что касается многобайтовых символов и специфики, обусловленной языком, национальными особенностями и культурой.
Функции, типы и макросы объявляются в следующих стандартных заголовочных файлах:
Доступ к заголовочному файлу осуществляется с помощью строки препроцессора
#include <заголовочный файл>
Заголовочные файлы можно включать в любом порядке и сколько угодно раз. Строка #include
не должна быть внутри внешнего объявления или определения и должна встретиться раньше, чем что-нибудь из включаемого заголовочного файла будет востребовано. В конкретной реализации заголовочный файл может и не быть исходным файлом.