Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_по_пяву_4.doc
Скачиваний:
101
Добавлен:
15.03.2015
Размер:
1.29 Mб
Скачать
    1. Функция языка Си и процедурная абстракция

Как отмечалось ранее, применение абстракции позволяет повысить качество декомпозиции. Язык Си позволяет реализовать один из видов абстракции, который принято называть процедурной абстракцией. Такой вид абстракции основан на применении подпрограмм. В процедурной абстракции используется способ, называемый абстрагированием через параметризацию. Понятие параметров функции знакомо читателю по работе с библиотечными функциями.

    1. Понятие о функции

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

Прежде всего, отметим, что в языке Си предусмотрены две категории функций:

  • Обычные функции.

  • Встроенные функции или inlineфункции (стандарт С99).

Основное отличие между этими категориями функции состоит в том, что в выполняемом коде программы всегда присутствует только одна копия кода обычной функции. Программный код inlineфункции встраивается в каждую точку ее вызова.

Рассмотрим компоненты этого определения:

  • Имя. Каждая функция должна иметь имя, которое позволяет обратиться к инструкциям, входящих в функцию. Такое обращение называетсявызовом функции. Функцию можно вызывать из другой функции.

  • Автономность – важнейшая характеристика функции. Язык Си обеспечивает синтаксическую независимость функции от другого программного кода.

  • Возвращаемое значениепозволяет вернуть результаты вычислений в точку вызова. Следует отметить, что возвращаемое значение является не единственным средством передачи в точку вызова результатов вычислений. Результаты вычислений можно вернуть, с помощью аппарата параметров функции, используя в качестве параметров указатели.

При работе с функциями языка Си следует различать три понятия:

    • Определение функции.

    • Объявление функции (прототип).

    • Вызов функции.

Определение функции является ее реализацией. Написать функцию означает написать ее определение. Каждая функция в программе должна быть представлена только одним определением (это не относится к так называемым встроенным функциям или inlineфункциям).

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

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

Следует учитывать, что определения функций в соответствии со стандартом языка Си не могут быть вложенными. Правда, некоторые расширения языка (например, вложенные функции реализованы среде rhide)