Partilhar via


__fastcall

Específicos do Microsoft

O __fastcall convenção de chamada Especifica que os argumentos para funções são a serem passados nos registradores, quando possível.A lista a seguir mostra a implementação dessa convenção de chamada.

Elemento

Implementação

Ordem de passagem de argumento

As duas primeiras DWORD ou menores argumentos são passados em ECX e EDX registradores; todos os outros argumentos são passados para a direita para a esquerda.

Responsabilidade de manutenção de pilha

Chamada função pops os argumentos da pilha.

Convenção de nome-decoration.

Arroba (@) é prefixada nomes; uma arroba seguido do número de bytes (em decimal) no parâmetro lista é sufixada nomes.

Convenção de tradução de caso

Nenhuma conversão de maiúsculas executada.

ObservaçãoObservação

Versões futuras do compilador podem usar registradores diferentes para armazenar os parâmetros.

Usando o /Gr opção de compilador que faz com que cada função no módulo para compilar como fastcall a menos que a função é declarada com um atributo em conflito ou o nome da função é main.

Em máquinas de família de processador Itanium (IPF) e AMD64, __fastcall é aceito e ignorado pelo compilador; em um chip IPF, por convenção, parâmetros são passados no registro.

Para funções de classe non-static, se a função é definida de fora de linha, o modificador de convenção de chamada não tem a ser especificado na definição de out-of-line.Ou seja, para métodos de membro não estático da classe, será adotada a convenção de chamada especificada durante a declaração no momento da definição.Dada a definição de classe,

struct CMyClass {
   void __fastcall mymethod();
};

Isso

void CMyClass::mymethod() { return; }

é equivalente a isso

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

Exemplo

No exemplo a seguir, a função chamada DeleteAggrWrapper é passado argumentos nos registradores:

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

Consulte também

Referência

Argumento passando e convenções de nomenclatura

Palavras-chave C++