Partilhar via


Passagem de argumento e convenções de nomenclatura

Seção específica da Microsoft

Os compiladores do Microsoft C++ permitem que você especifique convenções para transmitir 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 são transmitidos. 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.

Observação

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 runtime.

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 Convenção de chamada x64. Para obter informações sobre problemas de convenção de chamada no código para plataformas ARM, consulte Problemas de migração comuns do ARM 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 Efetuado push na pilha; o ponteiro this é 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 da seção específica da Microsoft

Confira também

Convenções de chamada