Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Функции. Определение функции, объявление функции и вызов функции. Возвращаемое значение функции.




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

рые исходные данные и который (в случае необходимости) способен возвращать один или несколько результатов своей работы.

Декларация функции

Как объект языка Си, функцию необходимо объявить. Объявление функции пользователя, т.е. ее декларация, выполняется в двух формах – в форме описания и форме определения.

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

(полный ее текст): в текущем или другом файле исходного текста либо находится в библиотеке.

В стандарте языка используется следующий способ декларации функций:

тип_результата ID _функции(тип переменной 1,…, тип переменной N); Заметим, что идентификаторы переменных в круглых скобках прототипауказывать необязательно, так как компилятор языка их не обрабатывает.Описание прототипа дает возможность компилятору проверить соответствие типов и количества параметров при вызове этой функции.

Пример описания функции fun со списком параметров:

float fun(int, float, int, int);

Полное определение функции имеет следующий вид:

тип_результата ID _функции (список параметров) {

код функции

return выражение;

}

Тип результата определяет тип выражения, значение которого возвращается в точку ее вызова при помощи оператора return. Если тип функции не указан, то по умолчанию предполагается тип int.

Список параметров состоит из перечня типов и идентификаторов параметров, разделенных запятыми.

Функция может не иметь параметров, но круглые скобки необходимы в любом случае.

Если функция не возвращает значения, она описывается как функция типа void и в данном случае оператор return не ставится.

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

Пример функции, определяющей наименьшее значение из двух целочисленных переменных:

int min (int x, int y) {

return (x<y)? x: y;

}

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

такой функции желательно в круглых скобках также указать ключевое слово void. Например, void main(void).

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

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

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

Вызов функции имеет следующий формат:

ID _функции (список аргументов);

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

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

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

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

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

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

ее адрес. А для обращения к значению аргумента-оригинала использовать операцию «*».






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных