История изменений
Исправление
Moisha_Liberman,
(текущая версия)
:
Мы ещё забыли о nested functions. Я про них напомню чтоб тут некотрые не орали попусту что об этих ф-ях забыли по незнанию. Я напомню. Мне не в напряг. =)
Да, вложенные функции это тоже функции, но, если честно, то «почти». Да, это тоже блоки кода, но нет, для них соглашения о вызовах исполняются не полностью. Там компиль должен сгенерить редуцированные prolog и epilog функции. Следовательно, в отношении этих… я бы их назвал «недо-лямбд», в полном объёме соглашения о вызовах исполнены быть не могут. Т.е., тут вопрос, конечно. Для простоты их считают функциями, а уж в полном ли объёме и как они там реализуются «унутре», это мало кого волнует.
Хотя, с другой стороны, это как посмотреть, потому как nested functions, это gcc’изм, т.е., расширение gcc и сам по себе стандарт ANSI C про них ничего не говорит и ни как их «не освящает». Так что, можно считать даже что их и нет и не использовать. Ни кто не осудит.
P.S. И да. Вот так изменились реализации языка С со времён не то чтобы K&R, а банального с89. Как изменилась реализация С++ с тех времён, когда С++ был прекомпилятором к языку С (т.н. реализация CFront), это и подумать страшно. =)
Исходная версия
Moisha_Liberman,
:
Чисто для полноты картины.
Мы ещё забыли о nested functions. Я про них напомню чтоб тут некотрые не орали попусту что об этих ф-ях забыли по незнанию. Я напомню. Мне не в напряг. =)
Да, вложенные функции это тоже функции, но, если честно, то «почти». Да, это тоже блоки кода, но нет, для них соглашения о вызовах исполняются не полностью. Там компиль должен сгенерить редуцированные prolog и epilog функции. Следовательно, в отношении этих… я бы их назвал «недо-лямбд», в полном объёме соглашения о вызовах исполнены быть не могут. Т.е., тут вопрос, конечно. Для простоты их считают функциями, а уж в полном ли объёме и как они там реализуются «унутре», это мало кого волнует.
Хотя, с другой стороны, это как посмотреть, потому как nested functions, это gcc’изм, т.е., расширение gcc и сам по себе стандарт ANSI C про них ничего не говорит и ни как их «не освящает». Так что, можно считать даже что их и нет и не использовать. Ни кто не осудит.