Структура программы. Язык С: Введение. Историческая справка
Язык С: Введение. Историческая справка. Язык был создан Ритчи Д. для ОС 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; просмотров: 1543;