Сущность и предназначение функций.
Функции пользователя и классы памяти.
Операция typedef
Любому типу данных, как стандартному, так и определенному пользователем, можно задать новое имя с помощью операции typedef:
typedef тип новое_имя ;
Введенный таким образом новый тип используется аналогично стандартным типам; например, можно ввести пользовательские типы:
typedef unsigned int UINT; – здесь UINT – новое имя для типа unsigned int;
typedef char M_s[101]; –здесь M_s – тип пользователя, определяющий строки, длиной не более 100 символов.
Декларации объектов введенных типов будут иметь вид:
UINTi, j; ® две переменные типа unsigned int ;
M_s str[10]; ® массив из 10 строк по 100 символов.
Рассмотренная операция упрощает использование указателей на функции.
С увеличением объема программы ее код становится все более сложным. Одним из способов борьбы со сложностью любой задачи является ее разбиение на части.
В языке Cи, как и в любом языке программирования высокого уровня, задача может быть разбита на более простые подзадачи при помощи подпрограмм-функций. После этого программу можно рассматривать в более укрупненном виде – на уровне взаимодействия созданных подпрограмм. Использование подпрограмм в коде программы ведет к упрощению ее структуры.
Разделение программы на подзадачи позволяет также избежать избыточности кода, поскольку функцию записывают один раз, а вызывать ее на выполнение можно многократно из разных точек программы. Кроме того, упрощается процесс отладкипрограммы, содержащей подпрограммы. Часто используемые функции можно помещать в отдельные библиотеки.
Следующим шагом может являться группировка функций и связанных с ними данных в отдельные файлы (модули), компилируемые раздельно. Получившиеся в результате компиляции объектные модули объединяются в исполняемую программу с помощью компоновщика (Linker). Разбиение на модули уменьшает время перекомпиляции и облегчает процесс отладки, скрывая несущественные детали за интерфейсом модуля, что позволяет отлаживать программу по частям. Для того чтобы использовать модуль, достаточно знать только его интерфейс (названия функций и их параметры), а не все детали его реализации.
Разделение программы на максимально обособленные части (подпрограммы) является довольно сложной задачей, которая должна решаться на этапе проектирования программы.
В отличие от других языков программирования высокого уровня в языке Си нет разделения на подпрограммы-процедуры и подпрограммы-функции, здесь любая подпрограмма является функцией.
Функция – это именованная последовательность инструкций, выполняющая какое-либо законченное действие, к которой можно обратиться, передав через параметры исходные данные и получив один или несколько результатов его работы.
"Основная часть" программы в языке Си также считается функцией - функцией main (основная, главная), с которой и начинается выполнение программы. Функциями являются и обработчики событий (например, Button1Click) в оконных приложениях. Таким образом, любая программа на языке Cи состоит из функций.