Paso de argumentos y convenciones de nomenclatura

Específicos de Microsoft

Los compiladores de Microsoft C++ permiten especificar convenciones para pasar argumentos y valores devueltos entre funciones y llamadores. No todas las convenciones están disponibles en todas las plataformas compatibles y algunas convenciones utilizan implementaciones específicas de la plataforma. En la mayoría de los casos, se omiten palabras clave o modificadores de compilador que especifican una convención no compatible en una plataforma concreta y se usa la convención predeterminada de la plataforma.

En plataformas x86, todos los argumentos se amplían a 32 bits cuando se pasan. Los valores devueltos también se amplían a 32 bits y se devuelven en el registro EAX, salvo las estructuras de 8 bytes, que se devuelven en el par de registros EDX:EAX. Las estructuras de mayor tamaño se devuelven en el registro EAX como punteros a estructuras de devolución ocultas. Los parámetros se insertan en la pila de derecha a izquierda. Las estructuras distintas de POD no se devolverán en registros.

El compilador genera código de prólogo y epílogo para guardar y restaurar los registros ESI, EDI, EBX y EBP, si se usan en la función.

Nota:

Cuando se devuelve un struct, una unión o una clase desde una función por valor, todas las definiciones del tipo deben ser iguales; de lo contrario, se puede producir un error en el programa en tiempo de ejecución.

Para obtener información sobre la definición de código propio de epílogo y prólogo de la función, vea Llamadas a funciones naked.

Para obtener información sobre las convenciones de llamada predeterminadas en el código destinado a plataformas x64, vea Convención de llamada x64. Para obtener información sobre problemas de convención de llamada en código destinado a plataformas ARM, vea Problemas comunes de migración de ARM en Visual C++.

El compilador de Visual C/C++ admite las siguientes convenciones de llamada.

Palabra clave Limpieza de la pila Paso de parámetros
__cdecl Autor de llamada Inserta parámetros en la pila, en orden inverso (de derecha a izquierda)
__clrcall N/D Carga parámetros en la pila de expresiones CLR en orden (de izquierda a derecha).
__stdcall Destinatario Inserta parámetros en la pila, en orden inverso (de derecha a izquierda)
__fastcall Destinatario Almacenado en los registros y luego insertado en la pila
__thiscall Destinatario Insertado en la pila; puntero this almacenado en ECX
__vectorcall Destinatario Almacenado en registros y luego insertado en la pila en orden inverso (de derecha a izquierda)

Para obtener información relacionada, vea Convenciones de llamada obsoletas.

FIN de Específicos de Microsoft

Consulte también

Convenciones de llamada