I've come across __stdcall
a lot these days.
MSDN doesn't explain very clearly what it really means, when and why should it be used, if at all.
I would appreciate if someone would provide an explanation, preferably with an example or two.
All functions in C/C++ have a particular calling convention. The point of a calling convention is to establish how data is passed between the caller and callee and who is responsible for operations such as cleaning out the call stack.
The most popular calling conventions on windows are
__stdcall
, Pushes parameters on the stack, in reverse order (right to left)__cdecl
, Pushes parameters on the stack, in reverse order (right to left)__clrcall
, Load parameters onto CLR expression stack in order (left to right).__fastcall
, Stored in registers, then pushed on stack__thiscall
, Pushed on stack; this pointer stored in ECXAdding this specifier to the function declaration essentially tells the compiler that you want this particular function to have this particular calling convention.
The calling conventions are documented here
Raymond Chen also did a long series on the history of the various calling conventions (5 parts) starting here.