Compartilhar via


Passagem de argumento e convenções de nomenclatura

Específico da Microsoft

Os compiladores do Visual C++ permitem que você especifique convenções para passar argumentos e retornar valores entre funções e chamadores. Nem todas as convenções estão disponíveis em todas as plataformas com suporte. Além disso, algumas convenções usam implementações específicas para a plataforma. Na maioria dos casos, as palavras-chave ou opções de compilador que especificam uma convenção sem suporte em uma plataforma específica são ignoradas e a convenção padrão de plataforma é usada.

Nas plataformas x86, todos os argumentos são ampliados para 32 bits quando passados. Os valores de retorno também são ampliados para 32 bits e retornados no registro de EAX, com exceção das estruturas de 8 bytes, que são retornadas no par de registro EDX:EAX. Estruturas maiores são retornadas no registro de EAX como ponteiros para estruturas de retorno ocultas. Os parâmetros são empurrados para a pilha da direita para a esquerda. As estruturas que não forem PODs não serão retornadas em registros.

O compilador gera códigos de prólogo e de epílogo para salvar e restaurar os registros de ESI, EDI, EBX e EBP, se eles forem usados na função.

Dica

Quando um estrutura, união ou classe é retornada de uma função pelo valor, todas as definições de tipo precisam ser iguais, caso contrário, o programa poderá falhar no tempo de execução.

Para obter informações sobre como definir seu próprio código de prólogo e de epílogo de função, consulte Chamadas de função naked.

Para obter mais informações sobre convenções de chamada padrão no código para plataformas x64, consulte Visão geral do x 64 convenções de chamada. Para obter informações sobre problemas de convenção de chamada no código para plataformas ARM, consulte Problemas de migração ARM do Visual C++.

As seguintes convenções de chamada são suportadas pelo compilador visual do C/C++.

Palavra-Chave

Limpeza da pilha

Passagem de parâmetro

__cdecl

Chamador

Empurra parâmetros para a pilha, em ordem inversa (direita para a esquerda)

__clrcall

n/d

Carrega parâmetros na pilha de expressões CLR em ordem (da esquerda para a direita).

__stdcall

Receptor

Empurra parâmetros para a pilha, em ordem inversa (direita para a esquerda)

__fastcall

Receptor

Armazenado em registros, em seguida, empurrado para a pilha

__thiscall

Receptor

Empurrado para a pilha; este ponteiro é armazenado no ECX

__vectorcall

Receptor

Armazenado em registros e depois empurrado na pilha na ordem inversa (da direita para a esquerda)

Para obter informações relacionadas, consulte Convenções de chamada obsoletas.

FIM de Específico da Microsoft

Consulte também

Referência

Convenções de chamada