Структура программы. Язык С: Введение. Историческая справка


Язык С: Введение. Историческая справка. Язык был создан Ритчи Д. для ОС Unix, для ЭВМ PDP-11. Для этой ОС все общесистемные и прикладные программы были реализованы на этом языке. Основная цель была – создать язык системного программирования для разработки мобильных (переносимых) программ.

Основные сведения. Си обеспечивает работу с символами, числами и адресами. За счет последнего Си может быть использован в качестве системного ЯП. В Си нет операций для обработки составных объектов в целом (строк, множеств, массивов) как в PL/1. В значительной степени перекрываются возможности Ассемблера – работа с байтами, адресами, анализ битов, сдвига содержимого регистров, доступ к регистрам. Язык считается не слишком надежным из-за свободного доступа к ячейкам памяти через указатели. Этот недостаток, однако, компенсируется его простотой, эффективной реализацией и широким диапазоном возможностей для работы с данными от битов до арифметических данных повышенной размерности.

Управляющие конструкции обеспечивают поддержку структурированного программирования:

· ветвление – (if),

· циклы – (for, while, do),

· переключатель – (switch).

Адресная арифметика поддерживается ссылочным типом данных (указателями).

К любой функции можно обратиться рекурсивно.

Управление данными сводится к передаче аргументов по значению – путем копирования аргументов; функции не могут менять значения аргументов, передаваемых из обратившейся к ним программы. Если необходимо обеспечить вызов по ссылке, чтобы можно было менять значение передаваемых данных, то необходимо явно передавать адрес этих данных . Сам адрес передается по значению. Может быть передан адрес функции.

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

Дополнительная гибкость программирования обеспечивается текстовым препроцессором. Его утверждения все начинаются с символа “#”, например: #include…, #define… и т.д.

Структура программы

Программа строится на основе определения большого числа функций, небольших по размеру с точки зрения числа строк в них. После загрузки управление вначале передается функции с именем main.

 

main( )

{

printf (“Hello, world !\n”);

}

Представленная выше программа сразу не заработает. Надо вместо “…” написать - #include .

В данном примере программа состоит из одной функции main без параметров. Скобки ограничивают тело функции. Внутри находится функция printf , обеспечивающая печать текста Hello, world! Причем кавычки обеспечивают текст для печати, а символы \n являются управляющими и означают перевод строки (конец записи). Следующая печать будет продолжена с начала следующей строки.

Функция printf – библиотечная и для ее нахождения компоновщиком необходимо перед текстом основной программы указать, где выполнять поиск прототипа или шаблона этой функции. Тип файла h – означает текстовый файл для препроцессора. Он создает внешние сегменты данных и прототипы функций.

Пример

#include

main( )

….

Здесь #include – директива препроцессора Си, которая включает содержимое файла stdio.h в текст программы. Затем происходит совместная компиляция этого файла и основного текста. Файл stdio.h содержит спецификации или прототипы функций ввода/вывода и объявления некоторых типов данных. Примеры других файлов прототипов следующие:

math.h – математических функций,

string.h – обработки строк,

ctype.h - проверки символов.

Операторы ввода/вывода в языке С отсутствуют.

Пример

#include

main ( ) /*копирование входа */

{

int c;

while ((c=getchar( ))!=EOF)

putchar (c);

}

Следует иметь в виду, что getchar(с) читает символы из системного буфера и начинает это делать только тогда, когда буфер сформирован или нажат , а не при нажатии клавиши. Буфер формируется полностью после ввода 127 символов или нажатия клавиши .

Оператор цикла while имеет следующий синтаксис:

while (условие продолжения)

оператор;

В данном случае getchar( ) читает символ из входного потока и он присваивается переменной с. Оператор «!=» выполняет проверку на неравенство, где EOF стандартный символ константы, имеющий значение – ‘конец файла’. Определение константы находится в файле stdio.h.

Функция putchar (c) – функция вывода символа в выходной поток. Строка ‘int c;’ обозначает декларацию переменной с типа int (целого типа). Цикл продолжается пока не будет введен символ конца файла. С клавиатуры это CTRL-Z. Символы - /* и */ограничивают комментарий.

 



Дата добавления: 2016-05-26; просмотров: 1415;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.008 сек.