Функции в языке с
Функция является основным структурным элементом языка C. Определение функции имеет следующий синтаксис:
<возвращаемый_тип> <имя_функции>(<список параметров>)
{
<тело функции>
}
Пример:
long double max_ab(long double a, long double b)
{
long double x;
if (a>b) {x=a} else {x=b};
return x;
}
Данная функция возвращает значение максимального из своих двух параметров. Оператор return служит для указания возвращаемого функцией значения (в данном случае – значения переменной х). На нём исполнение функции заканчивается. Если оператор return отсутствует, то возвращается произвольное (непредсказуемое с точки зрения разработчика программы!) значение. Вызов данной функции в программе происходит следующим образом:
long double x=2.71, y=3.14, z;
z=max_ab(x, y);
При вызове функции возвращаемое ею значение можно игнорировать, например:
printf(“OK”);
Тип параметров функции при вызове должен в точности соответствовать типу параметров, указанных при её объявлении.
Помимо определения для функции обычно пишется также её прототип, который размещается в заголовочном файле с расширением *.h и служит для проверки корректности обращений к функциям при компиляции программы из нескольких модулей. Прототип функции идентичен заголовку, но заканчивается точкой с запятой, а тело функции отсутствует:
long double max_ab(long double a, long double b);
Функция в С может иметь переменное число параметров. В этом случае за последним обязательным параметром в заголовке функции следует многоточие. Подобной функцией является, например, функция printf().
Следует также отметить, что в С, в отличие от некоторых других языков программирования нет понятия “вложенных функций”. Все функции в С имеют одинаковый ранг.
Область действия переменных и связанные с нею понятия
Переменные в С могут быть локальными и глобальными, статическими и автоматическими, регистровыми, внешними и нестабильными. Они различаются областью действия, видимостью и временем жизни.
Областью действия переменной называется та часть программы, где переменная доступна для программного кода. По своей области действия переменные делятся на локальные и глобальные. Локальные переменные объявляются внутри функции и вне её не доступны. К ним можно обращаться только в пределах объявляющей их функции. Если две функции описывают локальную переменную с одним именем, то это две совершенно различные переменные и никакой неоднозначности не возникает. (Параметры в определении функции можно рассматривать в этом смысле как локальные переменные, инициализируемые значениями аргументов при вызове).
В противоположность локальным, глобальные переменные не относятся ни к какой функции и объявляются совершенно независимо. В пределах текущего модуля имя глобальной переменной должно быть уникальным. Областью действия глобальных переменных является (в принципе) вся программа. Если имя локальной переменной функции совпадает с именем глобальной, то локальная переменная в этом случае скрывает глобальную переменную с тем же именем (говорят ещё, что глобальная переменная становится невидимой внутри тела функции).
Для придания переменным некоторых специфических свойств в C существуют следующие модификаторы переменных:
static. Если локальная переменная объявлена в функции как static, то она будет сохранять своё значение между вызовами этой функции (то есть, фактически, существовать всё время, пока программа выполняется). Если модификатор static применить к глобальной переменной, то он ограничит область её действия текущим модулем компиляции.
auto. Специфицирует переменную как создаваемую автоматически и предполагается по умолчанию.
register. Рекомендует компилятору разместить локальную переменную в регистре процессора, если это возможно.
extern. Служит указанием компилятору, что переменная является внешней, то есть объявлена в другом модуле.
volatile. Служит для отметки нестабильных переменных.
Пример:
extern long double pi;
long double circle_square(long double r)
{
long double s;
s=pi*r*r;
return s;
}
В данном примере объявлена функция circle_square, вычисляющая площадь круга. Для вычисления она использует переменную pi, которая объявлена в другом модуле программы.
