__fastcall
Específicos de Microsoft
La convención de llamada de __fastcall especifica que los argumentos a funciones deben pasarse en registros, si es posible.La lista siguiente se muestra la aplicación de esta convención de llamada.
Elemento |
Implementación |
---|---|
el Argumento-pasar orden |
Primer dos DWORD o argumentos menores se pasan en registros de ECX y de EDX; el resto de los argumentos se pasan de derecha a izquierda. |
responsabilidad de Pila-mantenimiento |
La función llamada extrae los argumentos de la pila. |
convención de la Nombre-decoración |
El signo @ precedido los nombres; una arroba seguido del número de bytes (en formato decimal) en la lista de parámetros se añade el sufijo los nombres. |
convención de la Caso-traducción |
Ninguna traducción de caso realizada. |
[!NOTA]
Las versiones futuras de compilador pueden utilizar diferentes registros para almacenar parámetros.
Mediante /Gr la opción del compilador produce cada función en el módulo de compilación como fastcall a menos que la función se declara con un atributo en conflicto, o el nombre de la función es main.
En la familia de procesadores Itanium (IPF) y los equipos AMD64, __fastcall es aceptado y pasa por el compilador; en IPF chip, por convención, los parámetros se pasan en el registro.
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 __fastcall mymethod();
};
this
void CMyClass::mymethod() { return; }
es equivalente a esto
void __fastcall CMyClass::mymethod() { return; }
Ejemplo
En el ejemplo siguiente, la función llamada DeleteAggrWrapper es argumentos pasados en registros:
// Example of the __fastcall keyword
#define FASTCALL __fastcall
void FASTCALL DeleteAggrWrapper(void* pWrapper);
// Example of the __ fastcall keyword on function pointer
typedef BOOL (__fastcall *funcname_ptr)(void * arg1, const char * arg2, DWORD flags, ...);