Читайте также: |
|
Разобравшись с основными элементами языка, можно приступать к рассмотрению того, как из них строятся программы. Программы на Си состоят только из функций, и больше ни из чего. Функция – это именованный набор операторов, результат выполнения которого можно использовать в выражениях как значение. Функция имеет следующую структуру:
<тип> <имя>([<тип> <аргумент>[, <тип> <аргумент2]…]) {<тело функции>}
Поскольку результат выполнения функции можно использовать как значение, он должно иметь тип. Этот тип – и есть тип функции. Каждая функция в языке Си имеет своё уникальное[12] имя, по которому её можно вызвать – имя функции. Функции можно передать какие-то параметры, которые она будет использовать в своей работе – это аргументы функции. Операторы, которые будут выполняться при вызове функции, составляют тело функции.
Результатом работы функции должно быть какое-то конкретное значение. Это значение функция возвращает [13]. Для этого есть оператор return <переменная >. В месте, где стоит этот оператор, выполнение функции немедленно прекращается. То есть, если после него есть ещё какие-то операторы, они не будут выполнены. Существует также особый тип функции – void. Функция этого типа ничего не возвращает, её вызывают ради «побочных эффектов» от выполнения. Но оператор return, только без операндов, в ней можно использовать, если требуется принудительно прекратить выполнение.
Пример: рассмотрим функцию, возвращающую 1, если переданное ей число чётное, и 0 – если нечётное.
char even(int a) //returns 1 if a is even and 0 if a is odd
{
int e;
(a%2)&&(e=0)||!(a%2)&&(e=1);
return e;
}
В первой строке объявляется функция с именем even, у которой есть один аргумент типа int. Внутри функции (и нигде больше) он будет виден под именем a. Всё, что стоит после // – это комментарий. Комментарии – это участки в программном коде, которые игнорируются компилятором. Они нужны для улучшения читаемости кода. В комментариях даются краткие пояснения неочевидным действиям, назначениям функций и прочее. Комментарии также являются способом «выключения» участков кода при отладке. В языке Си комментарием считаются символы, начиная с двух слешей, и до конца строки, а также заключённые между /* комментарий*/. Поскольку большинство компиляторов работают в восьмибитных кодировках, при переходе с одного на другой могут возникнуть проблемы с отображением кириллицы, а потому рекомендуется все комментарии писать латинскими буквами: на языках с латинским алфавитом или путём транслитерации.
В третьей строке происходит объявление переменной e типа int. Эта переменная будет видна только внутри функции even, и больше нигде. Иными словами, она является локальной. Если бы мы хотели иметь переменную, доступную по одинаковому имени из любой функции, её надо было бы объявить вне всех функций, тогда она была бы глобальной.
Четвёртая строка – основная часть функции even, которая и производит вычисления. Несложно догадаться, что у чётных чисел остаток от деления на 2 равен 0, а у нечётных – 0. Это свойство и используется для определения чётности. Если остаток равен 0, то переменной e присваивается значение 1, если же он равен ненулевому значению (в данном случае это может быть только 1, но в общем случае – не ноль), то e присваивается значение 0. Возникает вопрос: ведь (a%2)&&(e=0)||!(a%2)&&(e=1) – это выражение, которое имеет значение – так, где же это значение используется? Это приводит к пониманию важной особенности языка Си в частности и процедурного программирования в целом: выражения вычисляются, даже если нигде не нужны. Если есть код, который можно выполнить – он выполняется, в не зависимости от того, нужен он или нет. Поэтому в том, что значение выражения нигде не используется, ошибки нет. Не будет ошибкой написать даже такую строку:
3;
Она будет спокойно воспринята компилятором.
В пятой строке функция возвращает значение переменной e и прекращает своё выполнение.
Дата добавления: 2015-11-13; просмотров: 40 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Часть 1: основные операторы и их приоритеты. | | | Лекция 5: Функция main, функции ввода-вывода, препроцессор. |