Опубликован: 05.07.2006 | Доступ: свободный | Студентов: 4680 / 885 | Оценка: 4.12 / 3.74 | Длительность: 18:59:00
Лекция 10:

Справочное руководство по языку C

< Лекция 9 || Лекция 10: 1234567891011
Аннотация: Дается исчерпывающее описание языка C.
Ключевые слова: DEC, PDP-11, IBM, компилятор, константа, операции, комментарий, строка символов, последовательность, ASME, символьная константа" type="def, символьная константа, условная последовательность, DDDS, конструкция, плавающая константа, тип, массив, класс памяти, программа, символ новой строки, ASCII, EBCDIC, альтернативные, терминал, выражение, фигурные скобки, синтаксис, место, автоматическая переменная, переменная, локальная переменная, внешняя переменная, функция, действительный, значение, ввод, класс, указатель, структура, объект, идентификатор, потеря точности, описание, определение, ассоциативность, круглые скобки, переполнение, библиотечная функция, индексация, обращение к функции, первичное выражение, массив символов, инициализатор, вывод, аргумент функции, аргумент, casting, MOS, адрес переменной, обратный код, арифметические преобразования, префиксные операции, данные, процедура, ввод-вывод, эквивалентное выражение, адрес, операции сдвига, знаковый бит, машинно-независимость, память, описатели, список, спецификация, FIPS, PFI, X3D, структура" type="def, левое поддерево, символьный массив, оператор, вызывающая программа, оператор цикла, спецификатор, область действия, конец файла, связь, диагностическое сообщение, действующий идентификатор, конец исходного файла, препроцессор, условная компиляция, исключение, стек, тернарная операция, статический объект, перечисление, VAX, присваивание, поле битов, равенство, прерывание, операционная система, Паскаль, множества, переменные, int, операционная система "UNIX"

9.1. Справочное руководство по языку "C"

Это руководство описывает язык "C" для компьютеров DEC PDP-11, HONEYWELL 6000, IBM система/370 и INTERDATA 8/32. там, где есть расхождения, мы сосредотачиваемся на версии для PDP-11, стремясь в то же время указать детали, которые зависят от реализации. За малым исключением, эти расхождения непосредственно обусловлены основными свойствами используемого аппаратного оборудования; различные компиляторы обычно вполне совместимы.

9.2. Лексические соглашения

Имеется шесть классов лексем: идентификаторы, ключевые слова, константы, строки, операции и другие разделители. Пробелы, табуляции , новые строки и комментарии (совместно, "пустые промежутки"), как описано ниже, игнорируются, за исключением тех случаев, когда они служат разделителями лексем. Необходим какой-то пустой промежуток для разделения идентификаторов, ключевых слов и констант , которые в противном случае сольются.

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

9.2.1. Комментарии

Комментарий открывается символами /* и заканчивается символами */. Комментарии не вкладываются друг в друга.

9.2.3. Идентификаторы (имена)

Идентификатор - это последовательность букв и цифр; первый символ должен быть буквой. Подчеркивание _ считается буквой. Буквы нижнего и верхнего регистров различаются. значащими являются не более, чем первые восемь символов, хотя можно использовать и больше. На внешние идентификаторы, которые используются различными ассемблерами и загрузчиками, накладываются более жесткие ограничения:

Таблица 9.1.
DEC PDP-11 7 символов 2 регистра
HONEYWELL 6000 6 символов 1 регистр
IBM 360/370 7 символов 1 регистр
INTERDATA 8/32 8 символов 2 регистра

9.2.4. Ключевые слова

Следующие идентификаторы зарезервированы для использования в качестве ключевых слов и не могут использоваться иным образом:

  • int
  • extern
  • else
  • char
  • register
  • for
  • float
  • typedef
  • do
  • double
  • static
  • while
  • struct
  • goto
  • switch
  • union
  • return
  • case
  • long
  • sizeof
  • default
  • short
  • break
  • entry
  • unsigned
  • continue
  • *auto
  • if

Ключевое слово entry в настоящее время не используется каким-либо компилятором ; оно зарезервировано для использования в будущем. В некоторых реализациях резервируется также слова fortran и asm

9.2.5. Константы

Имеется несколько видов констант, которые перечислены ниже. Далее резюмируются характеристики аппаратных средств, которые влияют на размеры.

9.2.5.1. Целые константы

Целая константа, состоящая из последовательности цифр, считается восьмеричной, если она начинается с 0 (цифра нуль), и десятичной в противном случае. Цифры 8 и 9 имеют восьмеричные значения 10 и 11 соответственно. последовательность цифр, которой предшествуют символы (нуль, х-маленькое) или 0X (нуль X-большое), рассматривается как шестнадцатеричное целое. Шестнадцатеричные цифры включают буквы от а (маленькое) или A (большое) до f (маленькое) или F (большое) со значениями от 10 до 15. Десятичная константа, величина которой превышает наибольшее машинное целое со знаком, считается длинной; восьмеричная или шестнадцатеричная константа, которое превышает наибольшее машинное целое без знака, также считается длинной.

9.2.5.2. Явные длинные константы

Десятичная, восьмеричная или шестнадцатеричная константа, за которой непосредственно следует l (эль-маленькое) или L (эль-большое), является длинной константой. Как обсуждается ниже, на некоторых машинах целые и длинные значения могут рассматриваться как идентичные.

9.2.5.3. Символьные константы

Символьная константа - это символ, заключенный в одиночные кавычки, как, например, 'x' . Значением символьной константы является численное значение этого символа в машинном представлении набора символов.

Некоторые неграфические символы, одиночная кавычка ' и обратная косая черта \ могут быть представлены в соответствии со следующей таблицей условных последовательностей:

Таблица 9.2.
новая строка NL/LF/ \n
горизонтальная табуляция HT \t
символ возврата на одну позицию BS \b
возврат каретки CR \r
переход на новую страницу FF \f
обратная косая черта \ \\
одиночная кавычка ' \'
комбинация битов DDD \ddd

Условная последовательность \ddd состоит из обратной косой черты, за которой следуют 1, 2 или 3 восьмеричных цифры, которые рассматриваются как задающие значение желаемого символа. Специальным случаем этой конструкции является последовательность \0 (за нулем не следует цифра), которая определяет символ nul. Если следующий за обратной косой чертой символ не совпадает с одним из указанных, то обратная косая черта игнорируется.

9.2.5.4. Плавающие константы

Плавающая константа состоит из целой части, десятичной точки, дробной части, буквы e (маленькая) или e (большая) и целой экспоненты с необязательным знаком. Как целая, так и дробная часть являются последовательностью цифр. Либо целая, либо дробная часть (но не обе) может отсутствовать; либо десятичная точка, либо е (маленькая) и экспонента (но не то и другое одновременно) может отсутствовать. Каждая плавающая константа считается имеющей двойную точность.

9.2.6. Строки

Строка - это последовательность символов, заключенная в двойные кавычки, как, например, "...". Строка имеет тип " массив символов " и класс памяти static. Строка инициализирована указанными в ней символами. Все строки, даже идентично записанные, считаются различными. Компилятор помещает в конец каждой строки нулевой байт \0, с тем чтобы просматривающая строку программа могла определить ее конец. Перед стоящим внутри строки символом двойной кавычки " должен быть поставлен символ обратной косой черты \ ; кроме того, могут использоваться те же условия последовательности, что и в символьных константах. И последнее, обратная косая черта \, за которой непосредственно следует символ новой строки, игнорируется.

9.2.7. Характеристики аппаратных средств

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

Таблица 9.3.
DEC PDP-11 HONEYWELL IBM 370 INTERDATA 8/32
ASCII ASCII EBCDIC ASCII
char 8 BITS 9 BITS 8 BITS 8 BITS
int 16 36 32 32
short 16 36 16 16
long 32 36 32 32
float 32 36 32 32
double 64 72 64 64
range -38/+38 -38/+38 -76/+76 -76/+76

9.3. Синтаксическая нотация

В используемой в этом руководстве синтаксической нотации синтаксические категории выделяются курсивом (прим. перев.: в настоящее время синтаксические категории вместо курсива выделяются подчеркиванием), а литерные слова и символы - жирным шрифтом. Альтернативные категории перечисляются на отдельных строчках. Необязательный символ, терминальный или нетерминальный, указывается индексом " необ ", так что

{ выражение 
   --------- необ }

указывает на необязательное выражение, заключенное в фигурных скобках. Синтаксис суммируется в пункте 18.

< Лекция 9 || Лекция 10: 1234567891011