Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Оператор перехода goto



Оператор перехода goto передает управление непосредственно на <оператор>, помеченный <меткой>. Метка представляет собой обычный идентификатор. Область действия метки ограничивается функцией, в которой она определена; из этого следует, во-первых, что каждая метка должна быть отлична от других меток в той же самой функции; во-вторых, что нельзя передать управление по оператору goto в другую функцию.

Помеченный оператор выполняется сразу после выполнения оператора goto. Нельзя с помощью оператора goto передать управление на конструкции case и default в теле переключателя.

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

15) Функции в языке Си. Понятие функции. Определение функции (класс памяти; модификаторы типа функции; тип возвращаемых значений; формальные параметры; тело функции). Объявление функции. Вызов функции (фактические аргументы; вызов функции с переменным числом аргументов; рекурсивные вызовы). Программирование рекурсивных алгоритмов.

Функция - Совокупность объявлений и операторов, предназначенных для выполнения некоторых отдельных задач. Количество функций в программе не ограничено. Любая программа на Си содержит как минимум одну функцию с именем main. Определение функции специфицирует имя функции, атрибуты ее формальных параметров и тело функции, содержащее объявление операторов. В определении функции также может задаваться класс памяти функции и тип возвращаемого значения. Объявление функции задает имя функции и тип возвращаемого значения. В определение функции так же может задаваться класс памяти функции и тип возвращаемого значения. В объявлении функции так же может специфицироваться класс памяти, число аргументов и их тип. В объявлении функции допустимо задавать идентификаторы и класс памяти аргументов. Если тип возвращаемого значения не указывается, то по умолчанию используется тип «целый». К моменту вызова функции должен быть известен тип возвращаемого значения. Что требует предварительного объявления, если это необходимо. Формальные параметры. Это переменные, которые принимают значения, передаваемые функции при вызове в соответствии с порядком следования их имен в списке параметров. Список параметров содержит в круглых скобках идентификаторы, разделенные запятыми, при этом, для каждого идентификатора используется один тип. Список может быть пустым. После последнего идентификатора в списке параметров может быть троеточие. Это означает, что число параметров функции переменно, но не меньше, чем список идентификаторов до троеточия. Для доступа к значениям параметров, имена которых не заданы в списке формальных параметров, используется макроопределение. Допускается список параметров, состоящий только из троеточия. Это значит, что число параметров может быть равным нулю.

Формальные параметры могут иметь базовый тип, тип «структура», «объединение», либо быть указателем или массивом. Массив воспринимается как указатель на тип элементов массива. Параметры могут иметь класс памяти auto или register (auto – по умолчанию). Если параметр представлен, но не объявлен, считается, что он имеет тип int. Идентификаторы формальных параметров не могут совпадать с параметрами внутри тела функции. Однако возможно локальное переобъявление локальных параметров внутри локальных блоков функции. В случае, если имеется переменное число параметров, то программист отвечает за их определение. Тип каждого параметра должен соответствовать типу фактического аргумента при вызове функции, а также типу соответствующего параметра в предварительном объявлении со списком типов.

Компилятор выполняет преобразование типа отдельно над каждым формальным параметром и фактическим аргументом. После преобразования все формальные параметры имеют тип размером не меньше, чем int.

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

Тело функции. Это составной оператор, который содержит операторы, определяющие действия функции и определение операторов, используемых в этой функции. Все элементы, объявленные в функции, имеют по умолчанию класс auto, но можно присвоить и другой. При вызове функции выделяется память для локальных переменных, и, если указано, проводится их инициализация. Управление передается первому оператору составного оператора. Выполнение функции продолжается до тех пор, пока не встретится return, либо не будет достигнут конец составного оператора. Возвращение выполняется в точку вызова функции. Вызов функции передает управление от вызывающей к вызываемой функции, при этом значение фактических аргументов при их наличии передаются в вызываемую функцию. Все аргументы передаются по значению и только массивы по ссылке. При выполнении вызова функции значения фактических аргументов вычисляются, над ними выполняются необходимые преобразования, затем они помещаются в стек, откуда эти значения извлекаются и присваиваются формальным параметрам. Вызванная функция работает с копией фактических аргументов и никакое изменение формальных параметров не отразится на значении аргументов. При выполнении оператора возврата return управление передается в вызывающую функцию. Туда же передается возвращаемое значение, если оно есть. Функция может возвращать значение любого типа, кроме массива или функции. В частности, это может быть указатель на любой тип, включая массив или функцию. Тип возвращаемого значения, указываемый в определении функции, должен соответствовать типу возвращаемого значения во всех элементах функции. Для вызова функции с целым возвращаемым значением предварительного объявления не требуется. Для других типов функций объявление необходимо. Возврат значения выполняется при помощи оператора return, содержащего выражение, которое вычисляется, преобразуется к типу возвращаемого значения и возвращается в точку вызова функции. Если return отсутствует или не содержит выражение, то возвращаемое значение не определено.

Рекурсивные функции.

Любая функция в Си может быть вызвана рекурсивно. Рекурсивным называется вызов, при котором функция содержит вызов самой себя, либо вызов другой функции, которая вызывает первую функцию. Компилятор не ограничивает число рекурсивных вызовов в Си. При каждом рекурсивном вызове для переменных выделяются новые области памяти, если их класс не stack и не extern. Число рекурсивных вызовов фактически ограничивается объемом памяти, который необходим для хранения локальных переменных функции с классом памяти auto.

Правила построения рекурсии:

 Необходимо определить условие прекращения рекурсивных вызовов и порядок выхода из функции

 Для рекурсивного вызова определить параметр, изменение которого перед каждым вызовом приведет к получению истинного результата и условию, указанному в первом пункте

 Необходимо определить собственно действие, выполняемое при каждом рекурсивном вызове функции.

16) Директивы препроцессора и указания компилятору языка Си (основные понятия и определения; именованные константы и макроопределения; директива #define, склейка лексем и преобразование аргументов макроопределений, директива #undef; включение файлов; условная компиляция; директивы #if, #endif, #ifdef, #ifndef, #else, #elif; управление нумерацией строк; директива обработки ошибок; пустая директива; указания компилятору; псевдопеременные).





Дата публикования: 2015-02-20; Прочитано: 198 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...