русс | укр

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

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Введение


Дата добавления: 2015-01-16; просмотров: 578; Нарушение авторских прав


Язык "C" является универсальным языком программирова-ния. Он тесно связан с операционной системой "UNIX" , таккак был развит на этой системе и так как "UNIX" и ее прог-раммное обеспечение написано на "C". Сам язык , однако, несвязан с какой-либо одной операционной системой или машиной;и хотя его называют языком системного программирования, таккак он удобен для написания операционных систем, он с равнымуспехом использовался при написании больших вычислительныхпрограмм, программ для обработки текстов и баз данных. Язык "C" - это язык относительно "низкого уровня". Втакой характеристике нет ничего оскорбительного; это простоозначает, что "C" имеет дело с объектами того же вида, что ибольшинство ЭВМ, а именно, с символами, числами и адресами.Они могут объединяться и пересылаться посредством обычныхарифметических и логических операций, осуществляемых реаль-ными ЭВМ. В языке "C" отсутствуют операции, имеющие дело непос-редственно с составными объектами, такими как строки симво-лов, множества, списки или с массивами, рассматриваемыми какцелое. Здесь, например, нет никакого аналога операциям PL/1,оперирующим с целыми массивами и строками. Язык не предос-тавляет никаких других возможностей распределения памяти,кроме статического определения и механизма стеков, обеспечи-ваемого локальными переменных функций; здесь нет ни"куч"(HEAP), ни "сборки мусора", как это предусматривается вАЛГОЛЕ-68. Наконец, сам по себе "C" не обеспечивает никакихвозможностей ввода-вывода: здесь нет операторов READ илиWRITE и никаких встроенных методов доступа к файлам. Все этимеханизмы высокого уровня должны обеспечиваться явно вызыва-емыми функциями. Аналогично, язык "C" предлагает только простые, после-довательные конструкции потоков управления: проверки, циклы,группирование и подпрограммы, но не мультипрограммирование,параллельные операции, синхронизацию или сопрограммы. Хотя отсутствие некоторых из этих средств может выгля-деть как удручающая неполноценность ("выходит, что я долженобращаться к функции, чтобы сравнить две строки символов?!"), но удержание языка в скромных размерах дает реальныепреимущества. Так как "C" относительно мал, он не требуетмного места для своего описания и может быть быстро выучен.Компилятор с "C" может быть простым и компактным. Кроме то-го, компиляторы легко пишутся; при использовании современнойтехнологии можно ожидать написания компилятора для новой ЭВМза пару месяцев и при этом окажется, что 80 процентов прог-раммы нового компилятора будет общей с программой для ужесуществующих компиляторов. Это обеспечивает высокую степеньмобильности языка. Поскольку типы данных и стуктуры управле-ния, имеющиеся в "C", непосредственно поддерживаются боль-шинством существующих ЭВМ, библиотека, необходимая во времяпрогона изолированных программ, оказывается очень маленькой.На PDP -11, например, она содержит только программы для32-битового умножения и деления и для выполнения программввода и вывода последовательностей. Конечно, каждая реализа-ция обеспечивает исчерпывающую, совместимую библиотеку функ-ций для выполнения операций ввода-вывода, обработки строк ираспределения памяти, но так как обращение к ним осуществля-ется только явно, можно , если необходимо, избежать их вызо-ва; эти функции могут быть компактно написаны на самом "C". Опять же из-за того , что язык "C" отражает возможностисовременных компьютеров, программы на "C" оказываются доста-точно эффективными, так что не возникает побуждения писатьвместо этого программы на языке ассемблера. Наиболее убеди-тельным примером этого является сама операционная система"UNIX", которая почти полностью написана на "C". Из 13000строк программы системы только около 800 строк самого низко-го уровня написаны на ассемблере. Кроме того, по существувсе прикладное программное обеспечение системы "UNIX" напи-сано на "C"; подавляющее большинство пользователей системы"UNIX"(включая одного из авторов этой книги) даже не знаетязыка ассемблера PDP-11. Хотя "C" соответствует возможностям многих ЭВМ, он независит от какой-либо конкретной архитектуры машины и в силуэтого без особых усилий позволяет писать "переносимые" прог-раммы, т.е. программы, которые можно пропускать без измене-ний на различных аппаратных средствах. В наших кругах сталуже традицией перенос программного обеспечения, разработан-ного на системе "UNIX", на системы ЭВМ: HONEYWELL, IBM иINTERDATA. Фактически компиляторы с "C" и программное обес-печение во время прогона программ на этих четырех системах,по-видимому, гораздо более совместимы, чем стандартные вер-сии фортрана американского национального института стандар-тов (ANSI). Сама операционная система "UNIX" теперь работаеткак на PDP-11, так и на INTERDATA 8/32. За исключением прог-рамм, которые неизбежно оказываются в некоторой степени ма-шинно-зависимыми, таких как компилятор, ассемблер и отлад-чик. Написанное на языке "C" программное обеспечение иден-тично на обеих машинах. Внутри самой операционной системы7000 строк программы, исключая математическое обеспечениеязыка ассемблера ЭВМ и управления операциями ввода-вывода,совпадают на 95 процентов. Программистам, знакомым с другими языками, для сравне-ния и противопоставления может оказаться полезным упоминаниенескольких исторических, технических и философских аспектов"C". Многие из наиболее важных идей "C" происходят от гораз-до более старого, но все еще вполне жизненного языка BCPL ,разработанного Мартином Ричардсом. Косвенно язык BCPL оказалвлияние на "C" через язык "B", написанный Кеном Томпсоном в1970 году для первой операционной системы "UNIX" на ЭВМPDP-7. Хотя язык "C" имеет несколько общих с BCPL характерныхособенностей, он никоим образом не является диалектом пос-леднего. И BCPL и "B" - "безтипные" языки; единственным ви-дом данных для них являются машинное слово, а доступ к дру-гим объектам реализуется специальными операторами или обра-щением к функциям. В языке "C" объектами основных типов дан-ных являются символы, целые числа нескольких размеров и чис-ла с плавающей точкой. Кроме того, имеется иерархия произ-водных типов данных, создаваемых указателями, массивами,структурами, объединениями и функциями. Язык "C" включает основные конструкции потока управле-ния, требуемые для хорошо структуированных программ: группи-рование операторов, принятие решений (IF), циклы с проверкойзавершения в начале (WHILE, FOR) или в конце (DO) и выбородного из множества возможных вариантов (SWITCH). (Все этивозможности обеспечивались и в BCPL, хотя и при несколькоотличном синтаксисе; этот язык предчувствовал наступившуючерез несколько лет моду на структурное программирование). В языке "C" имеются указатели и возможность адреснойарифметики. Аргументы передаются функциям посредством копи-рования значения аргумента , и вызванная функция не можетизменить фактический аргумент в вызывающей программе. Еслижелательно добиться "вызова по ссылке", можно неявно пере-дать указатель, и функция сможет изменить объект, на которыйэтот указатель указывает. Имена массивов передаются указани-ем начала массивов, так что аргументы типа массивов эффек-тивно вызываются по ссылке. К любой функции можно обращаться рекурсивно, и ее ло-кальные переменные обычно "автоматические", т.е. Создаютсязаново при каждом обращении. Описание одной функции не можетсодержаться внутри другой, но переменные могут описываться всоответствии с обычной блочной структурой. Функции в "C" -программе могут транслироваться отдельно. переменные по от-ношению к функции могут быть внутренними, внешними, но из-вестными только в пределах одного исходного файла, или пол-ностью глобальными. Внутренние переменные могут быть автома-тическими или статическими. Автоматические переменные длябольшей эффективности можно помещать в регистры, но объявле-ние регистра является только указанием для компилятора и ни-как не связано с конкретными машинными регистрами. Язык "C" не является языком со строгими типами в смыслепаскаля или алгола 68. Он сравнительно снисходителен к пре-образованию данных, хотя и не будет автоматически преобразо-вывать типы данных с буйной непринужденностью языка PL/1.Существующие компиляторы не предусматривают никакой проверкиво время выполнения программы индексов массивов, типов аргу-ментов и т.д. В тех ситуациях, когда желательна строгая проверка ти-пов, используется специальная версия компилятора. Эта прог-рамма называется LINT очевидно потому, она выбирает кусочкипуха из вашей программы. Программа LINT не генерирует машин-ного кода, а делает очень строгую проверку всех тех сторонпрограммы, которые можно проконтролировать во время компиля-ции и загрузки. Она определяет несоответствие типов, несов-местимость аргументов, неиспользованные или очевидным обра-зом неинициализированные переменные, потенциальные трудностипереносимости и т.д. Для программ,которые благополучно про-ходят через LINT, гарантируется отсутствие ошибок типа при-мерно с той же полнотой, как и для программ, написанных,например, на АЛГОЛЕ-68. Другие возможности программы LINTбудут отмечены, когда представится соответствующий случай. Наконец, язык "C", подобно любому другому языку, имеетсвои недостатки. Некоторые операции имеют неудачное старшин-ство; некоторые разделы синтаксиса могли бы быть лучше; су-шествует несколько версий языка, отличающихся небольшими де-талями. Тем не менее язык "C" зарекомендовал себя как исклю-чительно эффективный и выразительный язык для широкого раз-нообразия применений программирования. Содержание книги организовано следующим образом. Глава1 является учебным введением в центральную часть языка "C".Цель - позволить читателю стартовать так быстро,как тольковозможно, так как мы твердо убеждены, что единственный спо-соб изучить новый язык - писать на нем программы. При этом ,однако, предполагается рабочее владение основными элементамипрограммирования; здесь не объясняется, что такое ЭВМ иликомпилятор, не поясняется смысл выражений типа N=N+1. Хотямы и пытались, где это возможно, продемонстрировать полезнуютехнику программирования. Эта книга не предназначается бытьсправочным руководством по структурам данных и алгоритмам;там, где мы вынуждены были сделать выбор, мы концентрирова-лись на языке. В главах со 2-й по 6-ю различные аспекты "C" излагаютсяболее детально и несколько более формально, чем в главе 1,хотя ударение по-прежнему делается на разборе примеров за-конченных, полезных программ, а не на отдельных фрагментах. В главе 2 обсуждаются основные типы данных, операторы ивыражения. В главе 3 рассматриваются управляющие операторы:IF-ELSE ,WHILE ,FOR и т.д. Глава 4 охватывает функции иструктуру программы - внешние переменные, правила определен-ных областей действия описания и т.д. В главе 5 обсуждаютсяуказатели и адресная арифметика. Глава 6 содержит подробноеописание структур и объединений. В главе 7 описывается стандартная библиотека ввода-вы-вода языка "C", которая обеспечивает стандартный интерфейс соперационной системой. Эта библиотека ввода-вывода поддержи-вается на всех машинах, на которых реализован "C", так чтопрограммы, использующие ее для ввода, вывода и других сис-темных функций, могут переноситься с одной системы на другуюпо существу без изменений. В главе 8 описывается интерфейс между "C" - программамии операционной системой "UNIX". Упор делается на ввод-вывод,систему файлов и переносимость. Хотя некоторые части этойглавы специфичны для операционной системы "UNIX", програм-мисты, не использующие "UNIX", все же должны найти здесь по-лезный материал, в том числе некоторое представление о том,как реализована одна версия стандартной библиотеки и предло-жения для достижения переносимости программы. Приложение A содержит справочное руководство по языку"C". Оно является "официальным" изложением синтаксиса и се-мантики "C" и (исключая чей-либо собственный компилятор)окончательным арбитром для всех двусмысленностей и упущенийв предыдущих главах. Так как "C" является развивающимся языком, реализован-ным на множестве систем, часть материла настоящей книги мо-жет не соответствовать текущему состоянию разработки на ка-кой-то конкретной системе. Мы старались избегать таких проб-лем и предостерегать о возможных трудностях. В сомнительныхслучаях, однако, мы обычно предпочитали описывать ситуациюдля системы "UNIX" PDP-11 , так как она является средой длябольшинства программирующих на языке "C". В приложении атакже описаны расхождения в реализациях языка "C" на основ-ных системах.

* 1. Учебное введение *



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


<== предыдущая лекция | следующая лекция ==>
Содержание | Hачинаем


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.587 сек.