Ответ:
Процедура – подпрограмма, которая получает передаваемые ей параметры и выполняет необходимые действия.
имя_функции(список_параметров)
Функция – отличается от процедуры тем, что дополнительно всегда возвращает одно результирующее значение.
тип имя_функции(список_параметров)
Синтаксис определения (definition) функции:
тип имя(список_параметров)
{
тело функции
}
Где:
· тип – тип возвращаемого значения. Особые случаи:
o void – нет возвращаемого значения (т.е. функция – эквивалент процедуры);
o тип опущен – по умолчанию предполагается тип int
· список_параметров – список формальных параметров (возможно пустой) разделенных запятыми, каждый элемент которого имеет вид:
тип имя_параметра
Примеры:
int sum(int x, int y) { int k; k = x + y; return k; } | sum(int x, int y) // неявныйтип int { int k; k = x + y; return k; } | int sum(int x, int y) { int k; k = x + y; return; // нет значения } | int sum(int x, int y) { int k; k = x + y; // поумолчанию return; } |
Параметры-переменные – параметры, служащие для возвращения результатов в основную программу.
Параметры-значение – параметры, служащие для передачи данных из программы в подпрограмму.
В каких случаях использовать параметры значения, а в каких - параметры-переменные:
Как осуществляется замена формальных параметров на фактические в момент обращения к подпрограмме?
· Если параметр определен как параметр-значение, то перед вызовом подпрограммы это значение вычисляется, полученный результат копируется во временную память и передается подпрограмме.
· Если же параметр определен как параметр-переменная, то при вызове подпрограммы передается сама переменная, а не ее копия. Любые возможные изменения в подпрограмме параметра-значения никак не воспринимаются вызывающей программой, так как в этом случае изменяется копия фактического параметра, в то время как изменение параметра-переменной приводит к изменению самого фактического параметра в вызывающей программе.
Описание всех формальных параметров как параметров-переменных нежелательно по двум причинам.
· Это исключает возможность вызова подпрограммы с фактическими параметрами в виде выражений, что делает программу менее компактной.
· В подпрограмме возможно случайное использование формального параметра, например, для временного хранения промежуточного результата, т.е. всегда существует опасность непреднамеренно «испортить» фактическую переменную.
20.Глобальные и локальные переменные в языке Си. Видимость объектов. Примеры.
Ответ:
Глобальные переменные
· Используются для описания данных, которые должны быть доступны в нескольких функциях, модулях.
· Как правило - описываются вне блоков (вначале модуля).
· Существуют все время исполнения программы.
· Главная проблема: сложность контроля за изменением данных (возможно в любых точках программы).
Локальные переменные
· Используются для временного хранения данных (внутри блока, функции).
· Описываются внутри блока
· Уничтожаются при выходе из блока
· Не рекомендуются при описании неизменяемых значений (констант)
int a; int function (int b, char c); void main (void) { int d, e; float f; ... } int function (int b, char c) { char g; ... } | // Определение глобальной переменной // Объявление функции (т.е. описание ее заголовка) //Тело программы //Определение локальных переменных //Определение локальной переменной //Определение функции и формальных параметров //Тело функции //Определение локальной переменной |
Область видимости - часть текста программы, в которой может быть использован данный объект. Область видимости имени начинается в точке объявления (сразу после объявителя, но перед инициализатором).
Видимость переменных и функций в программе определяется следующими правилами:
· Переменная, объявленная или определенная глобально, видима от точки объявления или определения до конца исходного файла.
· Переменная, объявленная или определенная локально, видима от точки объявления или определения до конца текущего блока.
· Переменные из объемлющих блоков, включая переменные объявленные на глобальном уровне, видимы во внутренних блоках ("вложенная видимость").
· Функции с классом памяти static видимы только в исходном файле, в котором они определены. Всякие другие функции видимы во всей программе.