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