Paso de argumentos y convenciones de nomenclatura
Específicos de Microsoft
Los compiladores de Visual 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 Información general sobre las convenciones 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 |
---|---|---|
Llamador |
Inserta parámetros en la pila, en orden inverso (de derecha a izquierda) |
|
no disponible |
Carga parámetros en la pila de expresiones CLR en orden (de izquierda a derecha). |
|
Destinatario |
Inserta parámetros en la pila, en orden inverso (de derecha a izquierda) |
|
Destinatario |
Almacenado en los registros y luego insertado en la pila |
|
Destinatario |
Insertado en la pila; puntero this almacenado en ECX |
|
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