Уровни стека вызовов

Как и в других языках программирования, в Scilab вызовы функций могут быть вложенными, т.е. функция f может вызывать функцию g, а та, в свою очередь, обращаться к функции h и т.д.

Команды, отданные из консоли Scilab, соответствуют нулевому уровню стека вызовов. Инструкции, находящиеся в теле запущенной из консоли функции, составляют первый уровень. Каждый вложенный вызов увеличивает глубину стека на 1, так что текущая глубина равна длине цепочки вложенных вызовов. Функции, представленные в табл. 18, используются для получения информации о состоянии стека вызовов:

 

whereami        возвращает текущее дерево вызовов

where              возвращает текущее дерево вызовов в виде матрицы

 

Таблица 18: Команды Scilab для работы со стеком вызовов.

 

В следующем примере мы определим три функции f main, f levell и f level2, вызывающих друг друга, и используем функцию whereami, которая отображает текущее состояние стека вызовов:

function у =  fmain   (  х )

у = 2  *  flevell   (  х )

endfunction

function у =  flevell   (  x )

у = 2  *  flevel2   (  x )

endfunction

function у =  flevel2   (  x )

у = 2  * x

whereami() endfunction

При вызове функции fmain в консоль будет выведено:

-->fmain(1)

whereami   called  at  line  3  of  macro flevel2

flevel2     called  at  line  2  of  macro  flevell

flevell     called  at  line  2  of  macro fmain

ans =

8.

Как можно видеть, отображается три уровня стека вызовов, соответствующие вызванным функциям.

Значения уровней стека вызовов в приведенном примере таковы:

  • уровень 0 - глобальный (команды, вводимые в консоли Scilab),
  • уровень -1 - в теле функции fmain,
  • уровень -2 - в теле функции flevell
  • уровень -3 - в теле функции flevel2

Эти уровни вызова отображаются в составе приглашения Scilab при интерак­тивной отладке функций с использованием инструкции pause и точек останова.

© vse-o-scilab

Сделать бесплатный сайт с uCoz