Рис. 1. Схема построения отчета при использовании резюме вложенного вызова
функции (поток управления внутри функции показан сплошными линиями,
отношение отложенной проверки в заданном узле — штрихпунктирной, трасса
построения отчета — пунктирной)
9 close_file(flag, file);
10 }
11
12 void double_close(FILE *file) {
13 fclose(file);
14 potential_double_close(true, file);
15 }
Резюме функции
close_file( )
аналогично предыдущему случаю. Ре-
зюме функции
potential_double_close( )
состоит из двух ветвей: в пер-
вой ветви (flag
≡
false) никакой дополнительной информации не хра-
нится, во второй (flag
≡
true) имеется отложенная проверка события
закрытия файла, содержащая ссылку на узел № 4 графа выполне-
ния функции
close_file( )
. В качестве точки отложенной проверки для
функции
potential_double_close( )
и в качестве целевого узла указыва-
ется не узел применения резюме, а его предшественник. Это выпол-
няется для упрощения, поскольку узел применения резюме на момент
сохранения информации еще не создан (сохранение информации про-
веряющих модулей является одним из действий по его созданию, и
к этому моменту проведены не все действия по применению резю-
ме), но информация об узле предвызова и целевом узле вызываемой
функции позволяет однозначно идентифицировать ветвь резюме (или
группу ветвей), затрагиваемую при прохождении пути до заданной
ISSN 0236-3933. Вестник МГТУ им. Н.Э. Баумана. Сер. “Приборостроение”. 2015. № 5 91