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