| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > аргументы функции в стеке |
| Автор: GQU 13.8.2014, 15:59 |
| почему функции в стек передают аргументы справа на лево?? |
| Автор: feodorv 13.8.2014, 16:37 |
Совершенно не обязательно: http://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D0%B3%D0%BB%D0%B0%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BE_%D0%B2%D1%8B%D0%B7%D0%BE%D0%B2%D0%B5. Для cdecl это так. И связано с поддержкой в языке C функций с переменным числом переменных. То есть передача аргументов в функции реализована одинаково как для функций с фиксированным числом аргументов, так и для функций с переменным числом аргументов. На момент создания языка C такая идея смотрелась хорошо. |
| Автор: math64 14.8.2014, 07:31 |
| В согдашении о вызовах указано в каком порядке агрументы будут лежать в стеке и какая сторона ответственна за их освобождение. В зависимости от версии компилятора, стек может заполняться как слева направо, так и справа налево. При этом соглашение будет соблюдаться в обоих случаях. |
| Автор: GQU 15.8.2014, 13:33 | ||
А если слева на право, тогда вроде как невозможна будет поддержка функций с переменный числом аргументов, вроде printf, а Си без эгого не Си |
| Автор: tzirechnoy 18.8.2014, 13:38 |
| Возможна, только тогда надо в соглашэнии указать, что число аргументов как-то передаётся. |
| Автор: math64 18.8.2014, 17:37 |
| При вызове prinf() и подобных функций известно число агрументов, внутри printf() - не известно, поэтому ответственна за освобождение памяти вызывающая функция. В новых компиляторах память под аргументы вызываемых функций выделяется при входе в функцию и указатель стека не дёргается. Аргументы заполняются слева направо. |