Язык программирования Си

Производственно-внедренческий кооператив "И Н Т Е Р Ф Е Й С" Диалоговая Единая Мобильная Операционная Система Демос/P 2.1 Язык программирования Си. Москва Описан универсальный язык программирования Си. Приве-дены структура и синтаксис языка, правила написания прог-рамм, даны начальные сведения о взаимодействии программ наСи с операционной системой Демос.

* 1. ВВЕДЕНИЕ

Язык Си - это универсальный язык программирования, длякоторого характерны экономичность выражения, современныйнабор операторов и типов данных. Язык Си не является ниязыком "очень высокого уровня", ни "большим" языком, и непредназначается для некоторой специальной области примене-ния, но отсутствие ограничений и общность языка делают егодля многих задач более удобным и эффективным, чем языки,предположительно более мощные. Операционная система, компи-лятор с языка Си и по существу все прикладные программы сис-темы "ДЕМОС" написаны на Си. Язык Си не связан с какими-либо определенными аппаратными средствами или системами, ина нем легко писать программы, которые можно пропускать безизменений на любой ЭВМ, имеющей Си-компилятор. Язык Си является универсальным языком программирования.Он первоначально появился в операционной системе UNIX, иразвивался как основной язык систем, совместимых с ОС UNIX. Сам язык, однако, не связан с какой-либо одной операционнойсистемой или машиной; и хотя его называют языком системногопрограммирования, так как он удобен для написания операцион-ных систем, он может использоваться для написания любыхбольших вычислительных программ, программ для обработкитекстов и баз данных. Язык Си - это язык относительно "низкого уровня". Этоозначает, что Си имеет дело с объектами того же вида, что ибольшинство ЭВМ, а именно, с символами, числами и адресами.Они могут объединяться и пересылаться посредством обычныхарифметических и логических операций, осуществляемых реаль-ными ЭВМ. В языке Си отсутствуют операции, имеющие дело непос-редственно с составными объектами, такими как строки симво-лов, множества, списки или с массивами, рассматриваемыми какцелое. Здесь, например, нет никакого аналога операциям PL /1,оперирующим с массивами и строками. Язык не предоставляетникаких других возможностей распределения памяти, кроме ста-тического определения и механизма стеков, обеспечиваемоголокальными переменных функций. Сам по себе язык Си не обес-печивает никаких возможностей ввода-вывода. Все эти меха-низмы высокого уровня должны обеспечиваться явно вызываемымифункциями. Аналогично, язык Си предлагает только простые, последо-вательные конструкции управления: проверки, циклы, группиро-вание и подпрограммы, но не мультипрограммирование, парал-лельные операции, синхронизацию или сопрограммы. Удержание языка в скромных размерах дает реальные преи-мущества. Так как Си относительно мал, он не требует многоместа для своего описания и может быть быстро выучен. -1- Компилятор с Си может быть простым и компактным. Это обес-печивает высокую степень мобильности языка. Поскольку типыданных и структуры управления, имеющиеся в Си, непосредст-венно поддерживаются большинством существующих ЭВМ, библио-тека, необходимая во время прогона изолированных программ,оказывается очень маленькой. На СМ-4, например, она содер-жит только программы для 32-битового умножения и деления идля упрятывания и восстановления регистров при входе в функ-цию. Конечно, каждая реализация обеспечивает исчерпывающую,совместимую библиотеку функций для выполнения операцийввода-вывода, обработки строк и распределения памяти, но таккак обращение к ним осуществляется только явно, можно, еслинеобходимо, избежать их вызова; эти функции могут быть ком-пактно написаны на самом Си. Опять же из-за того, что язык Си отражает возможностисовременных компьютеров, программы на Си оказываются доста-точно эффективными, так что не возникает побуждения писатьвместо этого программы на языке ассемблера. Хотя Си соот-ветствует возможностям многих ЭВМ, он не зависит от какой-либо конкретной архитектуры машины и в силу этого без особыхусилий позволяет писать "переносимые" программы, т.е. прог-раммы, которые можно пропускать без изменений на различныхаппаратных средствах. Язык Си не является языком со строгими типами данных всмысле Паскаля или Алгола-68. Он сравнительно снисходителенк преобразованию данных, хотя и не будет буйно преобразовы-вать типы данных подобно языку PL /1. Компилятор не предус-матривает никакой проверки индексов массивов, типов аргумен-тов и т.д. во время выполнения программы. В тех ситуациях, когда желательна строгая проверкатипов, используется специальная программа lint. Программа lint не генерирует машинного кода, а делает очень строгуюпроверку всех тех сторон программы, которые можно проконтро-лировать во время компиляции и загрузки. Она определяетнесоответствие типов, несовместимость аргументов, неисполь-зованные или очевидным образом неинициализированные перемен-ные, потенциальные трудности переносимости и т.д. Из за того, что в языке отсутствуют средстваввода/вывода и т.п., при программировании на нем существен-ную роль играет библиотека стандартных программ, осуществля-ющих взаимодействие с системой. Во всех системах, совмести-мых с ОС UNIX, к которым относится и ДЕМОС, существует сов-местимый набор программ для ввода/вывода, управленияпамятью, преобразования данных и выполняющих другие функции,использование которых обеспечивает возможность переносапрограмм на другие ЭВМ. В данном документе описывается язык Си, расширения,обеспечиваемые специальным препроцессором (фактически они -2- вошли уже в понятие "язык Си"), стандартная библиотекаввода/вывода, и даются начальные сведения о взаимодействиипрограмм на Си с ОС ДЕМОС. Полное описание библиотечныхпрограмм имеется в руководстве программиста ОС ДЕМОС (части3 и 4), и в оперативной документации man (2) и man (3). Хоро-шим учебником по языку Си является книга [1], краткое фор-мальное описание языка приведено в [2]. В тексте встречаются примечания, относящиеся к реализа-ции языка Си в ОС ДЕМОС. Такие примечания выделяются верти-кальной чертой справа (как выделен данный абзац).

* 2. СИНТАКСИЧЕСКАЯ НОТАЦИЯ

В используемой в этом руководстве синтаксической нота-ции синтаксические категории записываются русскими буквами исимволом "_", а все остальные символы рассматриваются каклитерные (то есть изображающие сами себя). Альтернативныекатегории перечисляются на отдельных строчках. Необязатель-ный символ, терминальный или нетерминальный, указываетсяиндексом "необ", так что { выражение } необ указывает на необязательное выражение, заключенное в фигур-ных скобках. Синтаксис описывается в Приложении 1. Если описание не помещается на одной строке, оно про-должается на следующей с некоторым сдвигом вправо, например: описание _ структуры: спецификатор _ типа список _ описателей _ структуры Здесь следует читать: описание _ структуры: спецификатор _ типа список _ описателей _ структуры Если сделан разбор входного потока на лексемы вплоть доданного символа, то в качестве следующей лексемы беретсясамая длинная строка символов, IBM/370 (OS-360) 7 символов, 1 регистр VAX 11 (UNIX) 7 символов, 2 регистра

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

Следующие идентификаторы зарезервированы для использо-вания в качестве ключевых слов и не могут использоватьсяиным образом: -3- 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.

Константы

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

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

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

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: