Article ID: 100832 - Last Review: December 9, 2005 - Revision: 5.0 Description of the calling conventions that the 32-bit compiler supportsThis article was previously published under Q100832 Note Microsoft Visual C++ .NET 2002 and Microsoft Visual C++ .NET 2003
support both the managed code model that is provided by the Microsoft .NET
Framework and the unmanaged native Microsoft Windows code model. The
information in this article applies only to unmanaged Visual C++
code. Note Microsoft Visual C++ 2005 supports both the managed code model that is provided by the .NET Framework and the unmanaged native Windows code model. SUMMARY Visual C++, 32-bit Edition, supports three calling
conventions: C (_cdecl), standard (_stdcall), and fastcall (_fastcall). The compiler does not support the Pascal calling convention (_pascal) provided by Microsoft compilers for MS-DOS and 16-bit Windows.
The following table summarizes the calling conventions.
_cdecl _stdcall _fastcall
-------------------------------------------------------------------
Arguments Pushed R to L Pushed R to L Note 3
Stack cleaned up by Caller Called Called
Naming convention Prepend "_" Note 1 Note 2
Note 1 The _stdcall calling convention decorates each function name by prepending an
underscore character (as the _cdecl convention does) and appending an at sign "@" and the decimal
representation of the number of bytes of stack space required. Each argument is
widened to a multiple of four bytes. Note 2 The _fastcall calling convention decorates each function name by prepending an
at sign "@" and appending an at sign and the decimal representation of the
number of bytes of stack space required. Each argument is widened to a multiple
of four bytes. Note 3 The first two function arguments that require four or fewer bytes
are placed into registers. The caller pushes the remainder of the parameters
onto the stack from right to left. This behavior may change in future
versions. The default calling convention is _cdecl. If an application declares a function that accepts a variable
number of arguments with the _fastcall or _stdcall calling convention, the compiler uses the _cdecl calling convention for that function. MORE INFORMATION The following code examples illustrate the code generated
in the calling function and in the called function to support the C calling
convention. APPLIES TO
| Article Translations
Audio/Video Resources
|
Back to the top
