Почему в __cdecl результат вызванной функции возвращается через регистр?

Рейтинг: 4Ответов: 0Опубликовано: 15.09.2014

Насколько я понял спецификацию, если результат функции целочисленный, он возвращается через регистр eax, а если вещественный - то через регистр сопроцессора st0.

Это решение мне кажется странным вот по какой причине. Я пробовал писать на C функции, возвращающие структуры, и всё работает. Но структура, скорее всего, в регистры процессора не влезет, и её придётся возвращать каким-нибудь другим способом (например, вернуть через eax указатель на фрагмент стека, в котором она находилась). Почему было не сделать, как в Паскалевском соглашении: после фактических параметров функции загнать в стек столько байт, сколько требуется для возвращаемого результата, чтобы функция записала его туда?

Ответы

Ответов пока нет.