Compartir a través de


__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, ...);

Vea también

Referencia

El paso y convenciones de nomenclatura de argumento

Palabras clave de C++