Pull to refresh

Comments 7

Одна из удобных возможностей современных языков программирования – вложенные функции

Может кто нибудь внятным языком объяснить чем это так удобно, или дать ссылку где почитать? Везде написано что это очень круто, только чем это лучше обычной функции не ясно. Лично как по мне только код тяжелее читать становиться.
UFO just landed and posted this here

Лучше уж прогуляться по источникам википедии, чем приводить ссылку на неё саму (тем более что в указанном абзаце упоминается единственный источник — https://www.drdobbs.com/nested-functions/184401792)

Инструкции enter и leave не имеют отношения к вложенным функциям. Они просто настраивают указатели стека так, как в 8086/8088 Си-функции настраивали их для невложенных функций. Через небольшое по историческим меркам время получилось так, что разработчики процессоров оптимизировали "обычные" push bp; mov bp,sp; sub bp,NNN так что они выполнялись быстрее enter (хотя и занимая при этом больше байт) и поэтому вот почти никто эти инструкции не использовал, кроме как ради экономии места — хотя большинство болт кладет на эту экономию (хотя во всех используемых функциях, кроме самых частых — следовало бы).

У инструкций enter и leave есть операнд. Поинтересуйтесь его назначением.

Они просто настраивают указатели стека так, как в 8086/8088 Си-функции настраивали их для невложенных функций.

В качестве исторической справки: первый компилятор Си для 8086/8088 вышел в июне 1982 — одновременно с 80186; так что разработчики 80186 даже при желании не могли бы учесть поведение ещё не написанных компиляторов Си.

ruvds, не подскажете, это авторская статья или переводная?

Sign up to leave a comment.