Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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