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 |
---|---|---|
Chamador |
Empurra parâmetros para a pilha, em ordem inversa (direita para a esquerda) |
|
n/d |
Carrega parâmetros na pilha de expressões CLR em ordem (da esquerda para a direita). |
|
Receptor |
Empurra parâmetros para a pilha, em ordem inversa (direita para a esquerda) |
|
Receptor |
Armazenado em registros, em seguida, empurrado para a pilha |
|
Receptor |
Empurrado para a pilha; este ponteiro é armazenado no ECX |
|
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