Согласен с предыдущими постами.Кстати, я действительно не понимаю, почему __cdecl
по-прежнему считается соглашением о вызовах по умолчанию для C / C ++.
Очевидно, что использование __cdecl
приводит к несколько большему коду, чем __stdcall
, так как функциязаписывается один раз и обычно вызывается из нескольких частей кода.Да, __cdecl
более гибок, поскольку допускает переменную длину аргументов.Но этот shoule будет использоваться IMHO только для соответствующих функций, отмеченных ...
.
Например, для вызова функций-членов (он же thiscall
) Msvc делает именно это: использует __stdcall
-подобное соглашение о вызовах, еслиФункция принимает переменные аргументы.(Кроме того, this
передается через регистр ECX
).