Пропуснете до основното съдържание »

Вашата кошница е празна

Програмният език С

Редовна цена: 25,00 лв.

Специална цена: 21,25 лв.

Наличност: На склад

Програмният език С

Кликнете два пъти върху изображението, за да го видите в по-голям размер

Намаляване
Увеличаване

Подробности

Езикът С е програмен език, с който могат да се изпълняват различни задания. Той се асоциира тясно с операционната система UNIX, тъй като беше разработен на такава система. Както системата, така и повечето програми, които работят на нея, са написани на С. Обаче езикът не е свързан с нито една операционна система или компютър; и въпреки че се нарича "системен програмен език", тъй като е много удобен за писане на компилатори и операционни системи, той се използва еднакво добре и за създаване на големи програми на различните домейни.
Езикът С предоставя фундаментални конструкции за управление на последователността на изпълнение, които са белег за всяка добре структурирана програма: групиране на оператори, вземане на решения (if-else), избиране на един от няколко възможни варианта (switch), цикъл с префиксен (while, for) и постфиксен (do) тест, възможност за преждевременно излизане от цикъл (break).
Функциите в С могат да връщат стойност от някой от основните типове или структура, обединение или указател. Всяка функция може да се извиква рекурсивно. Локалните променливи обикновено са "автоматични", т.е. се създават всеки път, когато бъдат извикани. Дефинициите на функциите не могат да се вграждат, но една и съща променлива може да се декларира неколкократно в различни блокове. Функциите от една С програма могат да бъдат поставени в отделни изходни файлове, които се компилират поотделно. Променливите могат да бъдат вътрешни за дадена функция, външни, но известни само в един изходен файл или достъпни за цялата програма. Предпроцесорната обработка предоставя заместване на макроси в програмния текст, включване на други изходни файлове и условна компилация. Езикът С е език на сравнително "ниско ниво". Тази характеристика няма отрицателен смисъл; тя просто показва, че С работи със същия вид обекти, с който работят повечето компютри, а именно символи, числа и адреси. Тези обекти могат да се комбинират и да се разместват посредством аритметични и логически оператори, реализирани от реални компютри.
Езикът С не предоставя операции, които да боравят директно със съставни обекти като символни низове, множества, списъци или масиви. Не съществуват операции, които да манипулират цял масив или низ, въпреки че езикът дава възможност за цялостно копиране на структури. Езикът не дефинира възможност за заделяне на памет, освен статичните дефиниции и стек-варианта за локалните променливи и функции; не съществува възможност за натрупване или за събиране на нищо незначещи стойности. И за да завършим този преглед трябва да отбележим, че самият С не предоставя входно/изходни характеристики; не съществуват оператори READ и WRITE и няма вградени методи за достъп до файлове. Всички тези механизми от "високо ниво" трябва да се предоставят от изрично извикани функции. Повечето реализации на С включват стандартен набор от такива функции.
Също така С предоставя само пряко, единично управление на последователността на изпълнение: тестове, цикли, групиране и подпрограми. Не се поддържат многопрограмното зареждане, паралелното изпълнение на операции, синхронизацията и съвместните функции. Въпреки че липсата на някои от тези характеристики може да ви се струва много печална ("Искате да кажете, че трябва да извиквам отделна функция, за да сравня два символни низа?"), фактът, че езикът се държи на ниско ниво си има своите предимства. Тъй като С е сравнително малък език, той може да се опише в малко пространство и бързо да бъде разучен. Програмистът съвсем логично ще очаква да разбере и наистина да използва правилно целия език. Години наред за дефиниция на С се приемаше наръчникът от първото издание на Програмният език С. През 1983 American National Standards Institute (ANSI) основа комитет, който да предостави една по-модерна и подробна дефиниция на С. Резултатната дефиниция – ANSI стандартът, наричан още "ANSI C", беше завършена през 1988. Повечето от характеристиките в стандарта вече се поддържат от модерните компилатори.
Стандартът се базира на първоначалния наръчник. Езикът беше променен съвсем малко: една от целите на стандарта беше да гарантира, че повечето от вече съществуващите програми ще останат валидни, или ако не бъдат валидни, то компилаторите ще произвеждат предупредително съобщение относно новото поведение. За повечето програмисти основната промяна е новият синтаксис на деклариране и дефиниране на функции. Декларацията на една функция вече може да включва описание на аргументите на функцията; синтаксисът на дефиницията се промени така, че да съответства на горното правило. Тази допълнителна информация улеснява компилаторите при откриването на грешки, причинени от несъответствие на аргументи; според нас от гледна точка на натрупания опит това е едно много полезно допълнение към езика.
Съществуват и други промени, макар и не толкова генерални. Присвояването на структури и на константи от изброим тип (което беше доста широко разпространено) сега официално се превърна в част от езика. Изчисленията със стойности с плаваща запетая сега могат да се извършват и с единична точност. Изясниха се свойствата на аритметичните операции, особено тези, които се отнасяха до беззнаковите типове. Предпроцесорът стана много по-подробен. Повечето от тези промени, обаче, няма да се отразят на програмистите.
Вторият значителен принос на стандарта е дефиницията на библиотеката, която придружава С. В нея са зададени функции за достъп до операционната система (например четене и писане на файлове), за форматиране на вход и изход, за заделяне на памет, за обработка на низове и така нататък. Наборът от стандартните заглавни файлове предоставя универсален достъп до декларациите на тези функции и до типовете данни. Програми, които използват тази библиотека, за да взаимодействат с хоста, имат гарантирано съвместимо поведение. Голяма част от библиотеката е проектирана спрямо "стандартната В/И библиотека" на системата UNIX. Тази библиотека беше описана в първото издание на настоящата книга; тя се използваше широко и на други системи. По-голямата част от програмистите отново не биха обърнали внимание на тези промени.
Тъй като типовете данни и контролните структури, предоставени от С, се поддържат директно от по-голямата част от компютрите, изпълнимата библиотека, необходима за реализацията на самосъдържащи се програми, е доста малка. Функциите от стандартната библиотека могат да се извикват единствено явно, така че те могат да бъдат пропуснати, когато не са необходими. Повечето от тези функции могат да бъдат написани на С и с изключение на детайлите на операционната система, които скриват, те самите са преносими.
Макар че С отговаря на възможностите на голяма част от компютрите, той не зависи от архитектурата на компютъра. Ако сте малко по-внимателни, няма да ви е трудно да пишете преносими програми – това са програми, които могат да се стартират на различни хардуерни конфигурации, без в тях да се внасят някакви промени. Стандартът изяснява въпроса с преносимостта, като предоставя набор от константи, характеризиращи компютъра, на който е стартирана съответната програма.
Предговор
Предговор към първото издание
Въведение
Глава 1: Въведение
1. Започваме
1.2 Променливи и аритметични изрази
1.3 Операторът for
1.4 Символни константи
1.5 Символен вход и изход
1.6 Масиви
1.7 Функции
1.8 Аргументи - извикване по стойност
1.9 Масиви от символи
1.10 Външни променливи и област на действие
Глава 2: Типове, оператори и изрази
2.1 Имена на променливи
2.2 Типове данни и техните големини
2.3 Константи
2.4 Декларации
2.5 Аритметични оператори
2.6 Релационни и логически оператори
2.7 Преобразуване на типове
2.8 Оператори за увеличаване и намаляване
2.9 Побитови оператори
2.10 Оператори за присвояване и изрази
2.11 Условни изрази
2.12. Приоритет и ред на изчисляване
Глава 3: Управление на последователността на изпълнение
3.1 Оператори и блокове
3.2 If-else
3.3 Else-if
3.4 Switch
3.5 Цикли – while и for
3.6 Цикли – do-while
3.7 Break и continue
3.8 Goto и етикети
Глава 4: Функции и структура на програмата
4.1 Основи на функциите
4.2 Функции, които не връщат цели числа
4.3 Външни променливи
4.4 Правила за областта на действие
4.5 Заглавни файлове
4.6 Статични променливи
4.7 Register променливи
4.8 Блокова структура
4.9 Инициализация
4.10 Рекурсия
4.11 Предпроцесорът на С
Глава 5: Указатели и масиви
5.1 Указатели и адреси
5.2 Указатели и аргументи на функции
5.3 Указатели и масиви
5.4 Адресна аритметика
5.5 Указатели от тип char и функции
5.6 Масиви от указатели; указатели към указатели
5.7 Многомерни масиви
5.8 Инициализация на масив от указатели
5.9 Указатели или многомерни масиви
5.10 Аргументи от командния ред
5.11 Указатели към функции
5.12 Сложни декларации
Глава 6: Структури
6.1 Основи на структурите
6.2 Структури и функции
6.3 Масиви от структури
6.4 Указатели към структури
6.5 Автоматично свързани структури
6.6 Таблица за справки
6.7 Typedef
6.8 Обединения
6.9 Битови полета
Глава 7: Вход и изход
7.1 Стандартен вход и изход
7.2 Форматиран изход – printf
7.3 Списъци с аргументи с променлива дължина
7.4 Форматиран вход – scanf
7.5 Достъп до файлове
7.6 Обработка на грешки – stderr и exit
7.7 Вход и изход, организирани в редове
7.8 Други функции
Глава 8: Интерфейсът на операционната система UNIX
8.1 Файлови дескриптори
8.2 В/И на ниско ниво – read и write
8.3 Open, creat, close, unlink
8.4 Пряк достъп – lseek
8.5 Пример – реализация на fopen и getc
8.6 Пример – преглед на директории
8.7 Пример – заделяне на памет
Приложение А: Кратък наръчник
А1. Въведение
А2. Лексикални условности
А3. Означение на синтаксиса
А4. Значение на идентификаторите
А5. Обекти и Lvalues (леви стойности)
А6. Преобразуване
А7. Изрази
А8. Декларации
А9. Оператори
А11. Област на действие (видимост) и свързване
А12. Предпроцесорна обработка
А13. Граматика
Приложение Б: Стандартната библиотека
Б1. Вход и изход:
Б2. Функции за тестване на символни данни:
Б3. Функции, свързани с низове:
Б4. Математически функции:
Б5. Помощни функции:
Б6. Диагностика:
Б7. Списъци с променлив брой аргументи:
Б8. Нелокални преходи:
Б9. Сигнали:
Б10. Функции, обработващи датата и времето:
Б11. Ограничения, наложени от реализацията: и
Приложение В: Обобщение на въведените промени .
Индекс
Браян Керниган е един от основателите на програмния език С. В момента работи в Computing Science Research Center at Bell Laboratories, Lucent Technologies. Той е научен редактор на книгите от професионалната компютърна серия на Addison Wesley и е съавтор, заедно с Роб Пайк, на The Practice of Programming.