Aprovação de argumentos e convenções de nomenclatura

Específico da Microsoft

Os compiladores do Microsoft 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 suportadas, e algumas convenções usam implementações específicas da plataforma. Na maioria dos casos, 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 da plataforma é usada.

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

O compilador gera código prolog e epilog para salvar e restaurar os registros ESI, EDI, EBX e EBP, se eles forem usados na função.

Observação

Quando uma struct, união ou classe é retornada de uma função por valor, todas as definições do tipo precisam ser as mesmas, caso contrário, o programa pode falhar em tempo de execução.

Para obter informações sobre como definir seu próprio prolog de função e código epilog, consulte Naked Function Calls.

Para obter informações sobre as convenções de chamada padrão no código destinado a plataformas x64, consulte Convenção de chamada x64. Para obter informações sobre como chamar problemas de convenção no código destinado a plataformas ARM, consulte Common Visual C++ ARM Migration Issues.

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

Palavra-chave Limpeza de pilha Passagem de parâmetros
__cdecl Autor da chamada Empurra parâmetros na pilha, na ordem inversa (da direita para a esquerda)
__clrcall não aplicável Carregue os parâmetros na pilha de expressões CLR em ordem (da esquerda para a direita).
__stdcall Callee Empurra parâmetros na pilha, na ordem inversa (da direita para a esquerda)
__fastcall Callee Armazenado em registradores e, em seguida, empurrado na pilha
__thiscall Callee Empurrado na pilha; this ponteiro armazenado em ECX
__vectorcall Callee Armazenado em registros, em seguida, empurrado na pilha em ordem inversa (da direita para a esquerda)
__preserve_none Callee Armazenado apenas em registos

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

END Específico da Microsoft

Ver também

Convenções de Chamada