|Important||This document may not represent best practices for current development, links to downloads and other resources may no longer be valid. Current recommended version can be found here. ArchiveDisclaimer|
Argument Passing and Naming Conventions
All arguments are widened to 32 bits when they are passed. Return values are also widened to 32 bits and returned in the EAX register, except for 8-byte structures, which are returned in the EDX:EAX register pair. Larger structures are returned in the EAX register as pointers to hidden return structures. Parameters are pushed onto the stack from right to left.
The compiler generates prolog and epilog code to save and restore the ESI, EDI, EBX, and EBP registers, if they are used in the function.
Note When a struct, union, or class is returned from a function by value, all definitions of the type need to be the same, else the program may fail at runtime.
For information on how to define your own function prolog and epilog code, see Naked Function Calls.
The following calling conventions are supported by the Visual C/C++ compiler.
|Keyword||Stack cleanup||Parameter passing|
|__cdecl||Caller||Pushes parameters on the stack, in reverse order (right to left)|
|__stdcall||Callee||Pushes parameters on the stack, in reverse order (right to left)|
|__fastcall||Callee||Stored in registers, then pushed on stack|
(not a keyword)
|Callee||Pushed on stack; this pointer stored in ECX|
For related information, see Obsolete Calling Conventions.
END Microsoft Specific