🗊Презентация 6. Процедуры и функции

Нажмите для полного просмотра!
6. Процедуры и функции, слайд №16. Процедуры и функции, слайд №26. Процедуры и функции, слайд №36. Процедуры и функции, слайд №46. Процедуры и функции, слайд №56. Процедуры и функции, слайд №66. Процедуры и функции, слайд №76. Процедуры и функции, слайд №86. Процедуры и функции, слайд №96. Процедуры и функции, слайд №106. Процедуры и функции, слайд №116. Процедуры и функции, слайд №126. Процедуры и функции, слайд №136. Процедуры и функции, слайд №146. Процедуры и функции, слайд №156. Процедуры и функции, слайд №166. Процедуры и функции, слайд №176. Процедуры и функции, слайд №186. Процедуры и функции, слайд №196. Процедуры и функции, слайд №206. Процедуры и функции, слайд №216. Процедуры и функции, слайд №226. Процедуры и функции, слайд №236. Процедуры и функции, слайд №246. Процедуры и функции, слайд №256. Процедуры и функции, слайд №266. Процедуры и функции, слайд №276. Процедуры и функции, слайд №286. Процедуры и функции, слайд №296. Процедуры и функции, слайд №306. Процедуры и функции, слайд №316. Процедуры и функции, слайд №326. Процедуры и функции, слайд №336. Процедуры и функции, слайд №346. Процедуры и функции, слайд №356. Процедуры и функции, слайд №366. Процедуры и функции, слайд №376. Процедуры и функции, слайд №386. Процедуры и функции, слайд №396. Процедуры и функции, слайд №406. Процедуры и функции, слайд №416. Процедуры и функции, слайд №426. Процедуры и функции, слайд №436. Процедуры и функции, слайд №446. Процедуры и функции, слайд №456. Процедуры и функции, слайд №466. Процедуры и функции, слайд №476. Процедуры и функции, слайд №486. Процедуры и функции, слайд №496. Процедуры и функции, слайд №506. Процедуры и функции, слайд №516. Процедуры и функции, слайд №526. Процедуры и функции, слайд №536. Процедуры и функции, слайд №546. Процедуры и функции, слайд №556. Процедуры и функции, слайд №566. Процедуры и функции, слайд №576. Процедуры и функции, слайд №586. Процедуры и функции, слайд №596. Процедуры и функции, слайд №606. Процедуры и функции, слайд №616. Процедуры и функции, слайд №626. Процедуры и функции, слайд №636. Процедуры и функции, слайд №646. Процедуры и функции, слайд №656. Процедуры и функции, слайд №666. Процедуры и функции, слайд №676. Процедуры и функции, слайд №686. Процедуры и функции, слайд №696. Процедуры и функции, слайд №706. Процедуры и функции, слайд №716. Процедуры и функции, слайд №726. Процедуры и функции, слайд №736. Процедуры и функции, слайд №746. Процедуры и функции, слайд №756. Процедуры и функции, слайд №766. Процедуры и функции, слайд №776. Процедуры и функции, слайд №786. Процедуры и функции, слайд №796. Процедуры и функции, слайд №806. Процедуры и функции, слайд №816. Процедуры и функции, слайд №826. Процедуры и функции, слайд №836. Процедуры и функции, слайд №84

Содержание

Вы можете ознакомиться и скачать презентацию на тему 6. Процедуры и функции. Доклад-сообщение содержит 84 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Процедуры и функции
Абстракция параметризованной совокупности действий.
Функция – описание вычисления значения; вызов функции – выражение;
Процедура – описание действий по изменению состояния памяти; вызов функции – оператор
C: процедура – функция, «вырабатывающая значение» типа void.
Описание слайда:
Процедуры и функции Абстракция параметризованной совокупности действий. Функция – описание вычисления значения; вызов функции – выражение; Процедура – описание действий по изменению состояния памяти; вызов функции – оператор C: процедура – функция, «вырабатывающая значение» типа void.

Слайд 2





Описание функции
Описание типа (спецификации) функции:
тип результата
типы (и имена) аргументов – формальных параметров
Именование функции
Описание тела функции
Область видимости
Описание слайда:
Описание функции Описание типа (спецификации) функции: тип результата типы (и имена) аргументов – формальных параметров Именование функции Описание тела функции Область видимости

Слайд 3





Процедуры и функции
Синтаксис:
Описание слайда:
Процедуры и функции Синтаксис:

Слайд 4





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

Слайд 5





Вызов функции
Описание слайда:
Вызов функции

Слайд 6





Вызов функции – пример (C)
ToPolar(x, y, &alpha, &ro)
* (shift ? sin : cos) (n * pi / 3)
(* F[i])(x > 0 ? 1 : x=-x , -1)
Ack(m-1, Ack(m,n-1))
WriteLn; - типичная ошибка
WriteLn(); - правильно
Описание слайда:
Вызов функции – пример (C) ToPolar(x, y, &alpha, &ro) * (shift ? sin : cos) (n * pi / 3) (* F[i])(x > 0 ? 1 : x=-x , -1) Ack(m-1, Ack(m,n-1)) WriteLn; - типичная ошибка WriteLn(); - правильно

Слайд 7





Вызов функции – 
шаги исполнения
Вычисляется вызываемая функция
Вычисляются фактические параметры
Создаются локальные объекты: формальные параметры, локальные объекты тела функции
Значения фактических параметров «связываются» с формальными параметрами
Выполняется тело функции
Удаляются локальные объекты
Возвращается результат
Описание слайда:
Вызов функции – шаги исполнения Вычисляется вызываемая функция Вычисляются фактические параметры Создаются локальные объекты: формальные параметры, локальные объекты тела функции Значения фактических параметров «связываются» с формальными параметрами Выполняется тело функции Удаляются локальные объекты Возвращается результат

Слайд 8





Оператор return
Синтаксис:
Вычисление результата функции
Завершение выполнения функции
Описание слайда:
Оператор return Синтаксис: Вычисление результата функции Завершение выполнения функции

Слайд 9





Функции - пример
Описание слайда:
Функции - пример

Слайд 10





Функции - пример
Описание слайда:
Функции - пример

Слайд 11





Дерево вызовов
Описание слайда:
Дерево вызовов

Слайд 12





Рекурсия
Статическая рекурсия -  цикл в графе вызовов (разрешимое свойство)
Динамическая рекурсия – при некотором исполнении программы вершина и некоторый её потомок в дереве вызовов соответствуют одной и той же функции (неразрешимое свойство)
Описание слайда:
Рекурсия Статическая рекурсия - цикл в графе вызовов (разрешимое свойство) Динамическая рекурсия – при некотором исполнении программы вершина и некоторый её потомок в дереве вызовов соответствуют одной и той же функции (неразрешимое свойство)

Слайд 13





Рекурсия
Вопрос: сколько раз вызывается power?
«Статический» ответ: 2
power(i,x)
power(n-1,x)
«Динамический» ответ: 6
power(2,10) – 1 раз
power(1,10) – 2 раза
power(0,10) – 3 раза
В общем случае n*(n-1)
Описание слайда:
Рекурсия Вопрос: сколько раз вызывается power? «Статический» ответ: 2 power(i,x) power(n-1,x) «Динамический» ответ: 6 power(2,10) – 1 раз power(1,10) – 2 раза power(0,10) – 3 раза В общем случае n*(n-1)

Слайд 14





Рекурсия – эффективность?
Вызов функции – дорогостоящая операция (отведение памяти, пересылка параметров, запоминание точки возврата и т.д.)
Для организации вызовов требуется дополнительная память, пропорциональная высоте дерева вызовов
Нерекурсивные функции могут быть реализованы эффективнее, например, за счёт статического выделения памяти для локальных объектов 
Рекурсия затрудняет статический анализ программы
Описание слайда:
Рекурсия – эффективность? Вызов функции – дорогостоящая операция (отведение памяти, пересылка параметров, запоминание точки возврата и т.д.) Для организации вызовов требуется дополнительная память, пропорциональная высоте дерева вызовов Нерекурсивные функции могут быть реализованы эффективнее, например, за счёт статического выделения памяти для локальных объектов Рекурсия затрудняет статический анализ программы

Слайд 15





Рекурсия - достоинствo
Позволяет естественно реализовать по-существу рекурсивный алгоритм
Описание слайда:
Рекурсия - достоинствo Позволяет естественно реализовать по-существу рекурсивный алгоритм

Слайд 16





Вложенные процедуры
Описание слайда:
Вложенные процедуры

Слайд 17





Вложенные процедуры – динамический контекст
Описание слайда:
Вложенные процедуры – динамический контекст

Слайд 18





Вложенные процедуры
Реализация существенно сложнее, поскольку требуется поддерживать динамическую цепочку контекстов
Может существенно уменьшить количество передаваемых параметров
Pascal – есть, C – нет.
Описание слайда:
Вложенные процедуры Реализация существенно сложнее, поскольку требуется поддерживать динамическую цепочку контекстов Может существенно уменьшить количество передаваемых параметров Pascal – есть, C – нет.

Слайд 19





Переменное число параметров - 
printf (C)
Описание слайда:
Переменное число параметров - printf (C)

Слайд 20





Переменное число параметров - недостатки (C)
my_printf(“%s + %s = ?”, UserName, 0.7L);
Несоответствие типов параметров формату
my_printf(“%f + %f = %f”, x, y);
Несоответствие количества параметров формату
(Почти) невозможно передать все параметры другой процедуре с переменным числом параметров, например, printf
Описание слайда:
Переменное число параметров - недостатки (C) my_printf(“%s + %s = ?”, UserName, 0.7L); Несоответствие типов параметров формату my_printf(“%f + %f = %f”, x, y); Несоответствие количества параметров формату (Почти) невозможно передать все параметры другой процедуре с переменным числом параметров, например, printf

Слайд 21





Переменное число параметров (Visual Basic)
Описание слайда:
Переменное число параметров (Visual Basic)

Слайд 22





Необязательные и именованные параметры
Описание слайда:
Необязательные и именованные параметры

Слайд 23





Необязательные и именованные параметры (Visual Basic)
Описание слайда:
Необязательные и именованные параметры (Visual Basic)

Слайд 24





Подстановка параметров по ссылке
Доступ во время исполнения к объектам, переданным параметрами:
Описание слайда:
Подстановка параметров по ссылке Доступ во время исполнения к объектам, переданным параметрами:

Слайд 25





Подстановка параметров по ссылке
Процедуры с несколькими результатами:
Описание слайда:
Подстановка параметров по ссылке Процедуры с несколькими результатами:

Слайд 26





Подстановка параметров по ссылке
Проблема синонимов
Описание слайда:
Подстановка параметров по ссылке Проблема синонимов

Слайд 27





Подстановка параметров по ссылке
Проблема синонимов
Затрудняет понимание программ
Мешает оптимизации, поскольку приходится предполагать, что параметр может указывать куда угодно
Описание слайда:
Подстановка параметров по ссылке Проблема синонимов Затрудняет понимание программ Мешает оптимизации, поскольку приходится предполагать, что параметр может указывать куда угодно

Слайд 28





Подстановка параметров по значению-результату
Описание слайда:
Подстановка параметров по значению-результату

Слайд 29





Строгое vs нестрогое вычисление
Строгое – фактические параметры полностью вычисляются до применения функции
Нестрогое – не  вычисляются до тех пор, пока не потребуются
Описание слайда:
Строгое vs нестрогое вычисление Строгое – фактические параметры полностью вычисляются до применения функции Нестрогое – не вычисляются до тех пор, пока не потребуются

Слайд 30





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

Слайд 31





Подстановка параметров по имени
Описание слайда:
Подстановка параметров по имени

Слайд 32





Подстановка параметров по имени
Описание слайда:
Подстановка параметров по имени

Слайд 33





Подстановка параметров по необходимости
Описание слайда:
Подстановка параметров по необходимости

Слайд 34





Функции обратного вызова (callback)
Интеграл
Описание слайда:
Функции обратного вызова (callback) Интеграл

Слайд 35





Функции обратного вызова (callback)
Сортировка
Упорядочить строки вещественной матрицы по значению скалярного произведения с вектором v;
Описание слайда:
Функции обратного вызова (callback) Сортировка Упорядочить строки вещественной матрицы по значению скалярного произведения с вектором v;

Слайд 36





Функции - реализация
Описание слайда:
Функции - реализация

Слайд 37





1. Упрощение выражений
Цель: эксплицировать последовательность выполнения побочных эффектов в выражении
Метод: разбить выражение на последовательность «элементарных» операторов присваивания
параметр вызова, возвращаемое значение, индекс или аргумент операции – переменная или константа
временные переменные для хранения промежуточных результатов
условные выражения – в условные операторы
Свойство: в любом операторе не более одного присваивания или вызова
Описание слайда:
1. Упрощение выражений Цель: эксплицировать последовательность выполнения побочных эффектов в выражении Метод: разбить выражение на последовательность «элементарных» операторов присваивания параметр вызова, возвращаемое значение, индекс или аргумент операции – переменная или константа временные переменные для хранения промежуточных результатов условные выражения – в условные операторы Свойство: в любом операторе не более одного присваивания или вызова

Слайд 38





Упрощение выражений
Описание слайда:
Упрощение выражений

Слайд 39





Результат
Описание слайда:
Результат

Слайд 40





2. Функции в процедуры
Любой вызов функции имеет вид
float t = F(…);
Метод:
Добавление параметра, передаваемоего по ссылке
замена оператора return присваиванием
Описание слайда:
2. Функции в процедуры Любой вызов функции имеет вид float t = F(…); Метод: Добавление параметра, передаваемоего по ссылке замена оператора return присваиванием

Слайд 41





Функции в процедуры
Описание слайда:
Функции в процедуры

Слайд 42





Функции в процедуры
Описание слайда:
Функции в процедуры

Слайд 43





Результат
Описание слайда:
Результат

Слайд 44





3. Процедуры с одним параметром
Метод:
Все локальные данные процедуры собрать в структуру - фрейм
Размещать фрейм и заполнять перед вызовом
В теле процедуры обращения к локальным переменным заменить на обращения к полям фрейма
Удалять фрейм в конце тела процедуры
Описание слайда:
3. Процедуры с одним параметром Метод: Все локальные данные процедуры собрать в структуру - фрейм Размещать фрейм и заполнять перед вызовом В теле процедуры обращения к локальным переменным заменить на обращения к полям фрейма Удалять фрейм в конце тела процедуры

Слайд 45





Процедуры с одним параметром
(poly)
Описание слайда:
Процедуры с одним параметром (poly)

Слайд 46





Процедуры с одним параметром
(poly)
Описание слайда:
Процедуры с одним параметром (poly)

Слайд 47





Процедуры с одним параметром
(power)
Описание слайда:
Процедуры с одним параметром (power)

Слайд 48





Процедуры с одним параметром
(power)
Описание слайда:
Процедуры с одним параметром (power)

Слайд 49





Процедуры с одним параметром
(main)
Описание слайда:
Процедуры с одним параметром (main)

Слайд 50





Процедуры с одним параметром
(poly)
Описание слайда:
Процедуры с одним параметром (poly)

Слайд 51





Результат (1)
Описание слайда:
Результат (1)

Слайд 52





Результат (2)
Описание слайда:
Результат (2)

Слайд 53





4. Стек, процедуры без параметров
В каждой процедуре есть доступ только к одному фрейму
Метод: 
в каждом фрейме хранить ссылку на фрейм вызывающей процедуры
поскольку вызовы могут быть из разных процедур, использовать явное приведение типов
ссылка на текущий фрейм – глобальная
Описание слайда:
4. Стек, процедуры без параметров В каждой процедуре есть доступ только к одному фрейму Метод: в каждом фрейме хранить ссылку на фрейм вызывающей процедуры поскольку вызовы могут быть из разных процедур, использовать явное приведение типов ссылка на текущий фрейм – глобальная

Слайд 54





Стек, процедуры без параметров
Описание слайда:
Стек, процедуры без параметров

Слайд 55





Стек, процедуры без параметров 
(poly)
Описание слайда:
Стек, процедуры без параметров (poly)

Слайд 56





Результат (1)
Описание слайда:
Результат (1)

Слайд 57





Результат (2)
Описание слайда:
Результат (2)

Слайд 58





5. Без процедур
От вызова процедуры остался только переход к выполнению телу
Возврат зависит от того, откуда вызвали
Метод:
Заголовок процедуры заменить на метку
После каждого вызова поставить метку
В каждом фрейме поле – метка возврата, заполняемое перед переходом к телу 
В конец процедуры – переход по значению метки возврата
Описание слайда:
5. Без процедур От вызова процедуры остался только переход к выполнению телу Возврат зависит от того, откуда вызвали Метод: Заголовок процедуры заменить на метку После каждого вызова поставить метку В каждом фрейме поле – метка возврата, заполняемое перед переходом к телу В конец процедуры – переход по значению метки возврата

Слайд 59





Без процедур
Описание слайда:
Без процедур

Слайд 60





Без процедур
Описание слайда:
Без процедур

Слайд 61





Результат (1)
Описание слайда:
Результат (1)

Слайд 62





Результат (2)
Описание слайда:
Результат (2)

Слайд 63





Реализация вычисляемых меток
(GCC)
Расширение C: 
унарный оператор && - адрес метки;
тип «метка»: void * e;
переход по вычисляемой метке goto *e;
Описание слайда:
Реализация вычисляемых меток (GCC) Расширение C: унарный оператор && - адрес метки; тип «метка»: void * e; переход по вычисляемой метке goto *e;

Слайд 64





Реализация вычисляемых меток
Для каждой процедуры известно множество меток возврата
Метод:
«Вычисляемая метка» имеет тип перечисления
Переход по вычисляемой метке заменить на переключатель
В случае, если возможна единственная метка возврата, то не хранить и возврат заменить на goto
Описание слайда:
Реализация вычисляемых меток Для каждой процедуры известно множество меток возврата Метод: «Вычисляемая метка» имеет тип перечисления Переход по вычисляемой метке заменить на переключатель В случае, если возможна единственная метка возврата, то не хранить и возврат заменить на goto

Слайд 65





Реализация вычисляемых меток
Описание слайда:
Реализация вычисляемых меток

Слайд 66





Реализация вычисляемых меток
Описание слайда:
Реализация вычисляемых меток

Слайд 67





Реализация вычисляемых меток
Описание слайда:
Реализация вычисляемых меток

Слайд 68





Реализация вычисляемых меток
Описание слайда:
Реализация вычисляемых меток

Слайд 69





Перемещение кода
Описание слайда:
Перемещение кода

Слайд 70





6. Реализация стека
Более эффективный метод управления памятью, ориентированный на специфику времени жизни локальных объектов
Все фреймы хранятся в одном (подвижном) байтовом массиве
Указатель на свободное место fp
Описание слайда:
6. Реализация стека Более эффективный метод управления памятью, ориентированный на специфику времени жизни локальных объектов Все фреймы хранятся в одном (подвижном) байтовом массиве Указатель на свободное место fp

Слайд 71





Реализация стека
Описание слайда:
Реализация стека

Слайд 72





Выход из глубокой рекурсии
procedure ReadEvalPrint;
  label ErrExit;
  function Eval(e : Expr) : integer;
  begin 
	 …
        ‘/’ :
           v1 := Eval(e^.left);
           v2 := Eval(e^.right);
           if v2 = 0 then
            begin
              WriteLn(‘Деление на ноль’);
              goto ErrExit;
            end;
	...
  end; (* Eval *)
Описание слайда:
Выход из глубокой рекурсии procedure ReadEvalPrint; label ErrExit; function Eval(e : Expr) : integer; begin … ‘/’ : v1 := Eval(e^.left); v2 := Eval(e^.right); if v2 = 0 then begin WriteLn(‘Деление на ноль’); goto ErrExit; end; ... end; (* Eval *)

Слайд 73





Выход из глубокой рекурсии 
(C)
void ReadEvalPrint() 
{
   char s[256]; 
   fputs(“Привет!”,stderr);
   for (;;)
   {
      fputc(‘>’,stderr); 
      fgets(s,stderr);
      if (s[0]==‘.’)
         break;
      fprintf(stderr, ”%d\n”,
            Eval(ParseExpr(s)));
ErrExit: ;
   }
   fputs(“Пока.”,stderr);
} // ReadEvalPrint
Описание слайда:
Выход из глубокой рекурсии (C) void ReadEvalPrint() { char s[256]; fputs(“Привет!”,stderr); for (;;) { fputc(‘>’,stderr); fgets(s,stderr); if (s[0]==‘.’) break; fprintf(stderr, ”%d\n”, Eval(ParseExpr(s))); ErrExit: ; } fputs(“Пока.”,stderr); } // ReadEvalPrint

Слайд 74





Выход из глубокой рекурсии 
(C)
void ReadEvalPrint() 
{
   char s[256]; 
   int res;
   fputs(“Привет!”,stderr);
   for (;;)
   {
      fputc(‘>’, stderr); 
      fgets(s, stderr);
      if (s[0]==‘.’)
         break;
      if (Eval(ParseExpr(s), & res))
          fprintf(stderr,”%d\n”, res);
   }
   fputs(“Пока.”,stderr);
} // ReadEvalPrint
Описание слайда:
Выход из глубокой рекурсии (C) void ReadEvalPrint() { char s[256]; int res; fputs(“Привет!”,stderr); for (;;) { fputc(‘>’, stderr); fgets(s, stderr); if (s[0]==‘.’) break; if (Eval(ParseExpr(s), & res)) fprintf(stderr,”%d\n”, res); } fputs(“Пока.”,stderr); } // ReadEvalPrint

Слайд 75





Код ошибки (1)
#define EVAL_OK 0 
#define EVAL_ERRDIV0 1
#define EVAL_ERROVERFLOW 2
Описание слайда:
Код ошибки (1) #define EVAL_OK 0 #define EVAL_ERRDIV0 1 #define EVAL_ERROVERFLOW 2

Слайд 76





Код ошибки (2)
#define EVAL_OK 0 
#define EVAL_ERRDIV0 1
#define EVAL_ERROVERFLOW 2
void ReadEvalPrint() 
{
   char s[256]; 
   int res;
   fputs(“Привет!”,stderr);
   for (;;)
   {
      fputc(‘>’, stderr); 
      fgets(s, stderr);
      if (s[0]==‘.’)
         break;
Описание слайда:
Код ошибки (2) #define EVAL_OK 0 #define EVAL_ERRDIV0 1 #define EVAL_ERROVERFLOW 2 void ReadEvalPrint() { char s[256]; int res; fputs(“Привет!”,stderr); for (;;) { fputc(‘>’, stderr); fgets(s, stderr); if (s[0]==‘.’) break;

Слайд 77





Нелокальные переходы
#include < setjmp.h > 
int setjmp(jmp_buf env);
запоминает обстановку вычислений и возвращает 0.
void longjmp(jmp_buf env, int val);  
восстанавливает запомненную setjmp обстановку вычислений
возвращается в то место, где setjmp собирался вернуть 0
заставляет setjmp выдать val вместо 0.
Описание слайда:
Нелокальные переходы #include < setjmp.h > int setjmp(jmp_buf env); запоминает обстановку вычислений и возвращает 0. void longjmp(jmp_buf env, int val); восстанавливает запомненную setjmp обстановку вычислений возвращается в то место, где setjmp собирался вернуть 0 заставляет setjmp выдать val вместо 0.

Слайд 78





Нелокальные переходы 
– пример (1)
#include <setjmp.h> 
#define EVAL_OK 0 
#define EVAL_ERRDIV0 1
#define EVAL_ERROVERFLOW 2
//данные для нелокального перехода
jmp_buf env; 
void ReadEvalPrint() 
{
   char s[256]; 
   int res;
   fputs(“Привет!”,stderr);
   for (;;)
   {
      fputc(‘>’, stderr); 
      fgets(s, stderr);
      if (s[0]==‘.’)
         break;
Описание слайда:
Нелокальные переходы – пример (1) #include <setjmp.h> #define EVAL_OK 0 #define EVAL_ERRDIV0 1 #define EVAL_ERROVERFLOW 2 //данные для нелокального перехода jmp_buf env; void ReadEvalPrint() { char s[256]; int res; fputs(“Привет!”,stderr); for (;;) { fputc(‘>’, stderr); fgets(s, stderr); if (s[0]==‘.’) break;

Слайд 79





Нелокальные переходы 
– пример (2)
#define EVAL_OK 0 
#define EVAL_ERRDIV0 1
#define EVAL_ERROVERFLOW 2
//данные для 
// нелокального перехода
jmp_buf env;
Описание слайда:
Нелокальные переходы – пример (2) #define EVAL_OK 0 #define EVAL_ERRDIV0 1 #define EVAL_ERROVERFLOW 2 //данные для // нелокального перехода jmp_buf env;

Слайд 80





Нелокальные переходы
Дают возможность обработки исключительных ситуаций
setjmp, longjmp – не являются процедурами в обычном смысле
Позволяют вернуть только код ответа
Крайне опасны при неаккуратном использовании
например, переход внутрь процедуры, выполнение которой уже закончилось
В современных языках есть специальные средства обработки исключительных ситуаций (exception, try-блоки)
Описание слайда:
Нелокальные переходы Дают возможность обработки исключительных ситуаций setjmp, longjmp – не являются процедурами в обычном смысле Позволяют вернуть только код ответа Крайне опасны при неаккуратном использовании например, переход внутрь процедуры, выполнение которой уже закончилось В современных языках есть специальные средства обработки исключительных ситуаций (exception, try-блоки)

Слайд 81





Классы памяти
аuto  - автоматическая память (умолчание, на практике не используется)
static – глобальная по времени жизни, локальная по области видимости (own в Algol-68)
register – предписание компилятору использовать регистр (не следует использовать)
extern – указание внешнего объекта
Описание слайда:
Классы памяти аuto - автоматическая память (умолчание, на практике не используется) static – глобальная по времени жизни, локальная по области видимости (own в Algol-68) register – предписание компилятору использовать регистр (не следует использовать) extern – указание внешнего объекта

Слайд 82





Классы памяти
(static)
void PrintLine(char * s) 
{
  static int counter = 0;
  printf(“%d:\t%s\n”, counter ++, s);
}
char * First10(char *s)
{
  static char buffer[11];
  strncpy(buffer, s, 10);
  return buffer;
}
Описание слайда:
Классы памяти (static) void PrintLine(char * s) { static int counter = 0; printf(“%d:\t%s\n”, counter ++, s); } char * First10(char *s) { static char buffer[11]; strncpy(buffer, s, 10); return buffer; }

Слайд 83





Модули (static, extern)
#define MAXDEPTH 128
static void * buffer[MAXDEPTH];
static int depth = 0;
int Empty()
{
  return depth == 0;
}
void Push(void * e) 
{
   buffer[depth++] = e;
}
void * Pop()
{
	return buffer[--depth];
}
Описание слайда:
Модули (static, extern) #define MAXDEPTH 128 static void * buffer[MAXDEPTH]; static int depth = 0; int Empty() { return depth == 0; } void Push(void * e) { buffer[depth++] = e; } void * Pop() { return buffer[--depth]; }

Слайд 84





Модули С
Недостатки
два раздельных файла - .c, .h
нет согласования
хотя может быть и достоинство для отслеживания изменения спецификации модуля (make)
отсутствие иерархии
например, невозможно выразить свойство «видимо только внутри данной библиотеки»
следствие – увеличение размера модулей
extern – по умолчанию
Описание слайда:
Модули С Недостатки два раздельных файла - .c, .h нет согласования хотя может быть и достоинство для отслеживания изменения спецификации модуля (make) отсутствие иерархии например, невозможно выразить свойство «видимо только внутри данной библиотеки» следствие – увеличение размера модулей extern – по умолчанию



Похожие презентации
Mypresentation.ru
Загрузить презентацию