__cdecl
Específicos de Microsoft
Ésta es la convención de llamada predeterminada de los programas de c y C++.Porque la pila es modificada la por el llamador, puede realizar funciones de vararg .La convención de llamada de __cdecl crea archivos ejecutables mayores que __stdcall, porque requiere cada llamada de función incluir código de limpieza de la pila.La lista siguiente se muestra la aplicación de esta convención de llamada.
Elemento |
Implementación |
---|---|
el Argumento-pasar orden |
De derecha a izquierda |
responsabilidad de Pila-mantenimiento |
La función de llamada extrae los argumentos de la pila |
convención de la Nombre-decoración |
El carácter de subrayado (_) se prefija los nombres, excepto al exportar el __cdecl funciona ese vinculación c de uso. |
convención de la Caso-traducción |
Ninguna traducción de caso realizada |
[!NOTA]
Para obtener información relacionada, vea Nombres representativos.
En la familia de procesadores Itanium (IPF) y procesadores x64, __cdecl es aceptado y pasa por el compilador; en IPF, por convención, los parámetros se pasan en el registro.
Coloque el modificador decdecl de antes de una variable o un nombre de función.Debido a que los nombres y las convenciones de llamada de C son el valor predeterminado, la única vez que necesita utilizar elcdecl es cuando se ha especificado la opción de compilador /Gz (stdcall) o /Gr (/ox).La opción del compilador /Gd fuerza la convención de llamada de __cdecl .
Para las funciones de clase no estáticas, si la función está fuera-de-línea definido, el modificador de la convención de llamada no tiene que especificarse en la definición fuera-de-línea.Es decir, para los métodos no estáticos de miembro de clase, se supone que la convención de llamada especificada durante la declaración actualmente la definición.Con esta definición de clase,
struct CMyClass {
void __cdecl mymethod();
};
this
void CMyClass::mymethod() { return; }
es equivalente a esto
void __cdecl CMyClass::mymethod() { return; }
Ejemplo
En el ejemplo siguiente, indican al compilador que utilizar nombres y las convenciones de llamada de c de la función de system :
// Example of the __cdecl keyword on function
int __cdecl system(const char *);
// Example of the __cdecl keyword on function pointer
typedef BOOL (__cdecl *funcname_ptr)(void * arg1, const char * arg2, DWORD flags, ...);