__fastcall__fastcall

Específicos de MicrosoftMicrosoft Specific

El __fastcall convención de llamada especifica que los argumentos para funciones deben pasarse en registros, siempre que sea posible.The __fastcall calling convention specifies that arguments to functions are to be passed in registers, when possible. Esta convención de llamada solo se aplica a la arquitectura x86.This calling convention only applies to the x86 architecture. En la lista siguiente se muestra la implementación de esta convención de llamada.The following list shows the implementation of this calling convention.

ElementoElement ImplementaciónImplementation
Orden de paso de argumentoArgument-passing order Los primeros dos argumentos DWORD o menores que se encuentran en la lista de argumentos de izquierda a derecha se pasan en registros ECX y EDX; el resto de los argumentos se pasan en la pila de derecha a izquierda.The first two DWORD or smaller arguments that are found in the argument list from left to right are passed in ECX and EDX registers; all other arguments are passed on the stack from right to left.
Responsabilidad de mantenimiento de pilaStack-maintenance responsibility Al llamar a la función aparece el argumento de la pila.Called function pops the arguments from the stack.
Convención de creación de nombres representativosName-decoration convention Arroba (@) se antepone a los nombres; una arroba seguido del número de bytes (en formato decimal) en el parámetro tiene el sufijo lista a los nombres.At sign (@) is prefixed to names; an at sign followed by the number of bytes (in decimal) in the parameter list is suffixed to names.
Convención de traducción de mayúsculas y minúsculasCase-translation convention No se lleva a cabo una traducción de mayúsculas y minúsculas.No case translation performed.

Nota

Las futuras versiones del compilador pueden utilizar distintos registros para almacenar parámetros.Future compiler versions may use different registers to store parameters.

Mediante el /GR opción del compilador hace que cada función del módulo compile como __fastcall a menos que la función se declara con un atributo en conflicto, o el nombre de la función main .Using the /Gr compiler option causes each function in the module to compile as __fastcall unless the function is declared by using a conflicting attribute, or the name of the function is main.

El __fastcall palabra clave acepta y omite los compiladores que tienen como destino ARM y x64 arquitecturas; en un x64 chip, por convención, los cuatro primeros argumentos se pasan en registros cuando sea posible y se pasan argumentos adicionales en la pila.The __fastcall keyword is accepted and ignored by the compilers that target ARM and x64 architectures; on an x64 chip, by convention, the first four arguments are passed in registers when possible, and additional arguments are passed on the stack. Para obtener más información, consulte x64 la convención de llamada.For more information, see x64 Calling Convention. En un chip ARM, se puede pasar hasta cuatro argumentos enteros y ocho argumentos de punto flotante en los registros; los argumentos adicionales se pasan en la pila.On an ARM chip, up to four integer arguments and eight floating-point arguments may be passed in registers, and additional arguments are passed on the stack.

En el caso de funciones de clase no estáticas, si la función se define fuera de línea, no es necesario especificar el modificador de convención de llamada en la definición fuera de línea.For non-static class functions, if the function is defined out-of-line, the calling convention modifier does not have to be specified on the out-of-line definition. Es decir, para los métodos miembro no estáticos de clase, en el momento de la definición se supone la convención de llamada especificada durante la declaración.That is, for class non-static member methods, the calling convention specified during declaration is assumed at the point of definition. Dada esta definición de clase:Given this class definition:

struct CMyClass {
   void __fastcall mymethod();
};

esto:this:

void CMyClass::mymethod() { return; }

equivale a esto:is equivalent to this:

void __fastcall CMyClass::mymethod() { return; }

Para ofrecer compatibilidad con versiones anteriores, _fastcall es un sinónimo de __fastcall a menos que la opción de compilador /Za (deshabilitar extensiones de lenguaje) es especificado.For compatibility with previous versions, _fastcall is a synonym for __fastcall unless compiler option /Za (Disable language extensions) is specified.

EjemploExample

En el siguiente ejemplo, se pasan argumentos a la función DeleteAggrWrapper en los registros:In the following example, the function DeleteAggrWrapper is passed arguments in registers:

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

FIN de Específicos de MicrosoftEND Microsoft Specific

Vea tambiénSee also

Paso de argumentos y convenciones de nomenclaturaArgument Passing and Naming Conventions
Palabras claveKeywords