/ Gd, /Gr, /Gz (convenção de chamada)
Essas opções determinam a ordem em que os argumentos de função são colocados na pilha; Se a função do chamador ou a função chamada remove os argumentos da pilha no final da chamada; e a convenção de decoração de nome que o compilador usa para identificar as funções individuais.
/Gd
/Gr
/Gz
Comentários
Observação |
---|
Essas opções de compilador só estão disponíveis no compilador x86; Essas opções de compilador não estão disponíveis nos compiladores direcionamento x64 ou Itanium. |
/Gd, a configuração padrão, especifica o cdecl convenção de chamada para todas as funções, exceto de membro C++ as funções e marcado como __stdcall ou __fastcall.
/GrEspecifica o __fastcall convenção de chamada para todas as funções, exceto de membro C++ sfunctions e funções marcadas com __cdecl ou __stdcall.Todos os __fastcall funções devem ter protótipos.
/GzEspecifica o __stdcall convenção de chamada para todas as funções, exceto de membro C++ as funções e marcado como __cdecl ou __fastcall.Todos os __stdcall funções devem ter protótipos.
Funções que levam a um número variável de argumentos devem ser marcadas __cdecl.
/Gd, /Gr, and /Gz are not compatible with /clr:safe or /clr:pure.
Observação |
---|
Para x86 processadores, por padrão, o uso de funções de membro C++ __thiscall. |
Para os processadores, uma função de membro que esteja explicitamente marcado como __cdecl, __fastcall, ou __stdcall usa a convenção de chamada especificada.Uma função de membro que leva a um número variável de argumentos sempre usa o __cdecl convenção de chamada.
_ _ cdecl especificidades
Para C, o __cdecl o nome da função de usos de convenção de nomeação precedido por um caractere de sublinhado ( _ ); Nenhuma conversão de maiúsculas é executada.A menos que declarado como extern "C", as funções de C++ usam um esquema de decoração de nome diferente.Para obter mais informações, consulte Nomes decorados.
especificações de __fastcall
Alguns de um __fastcall argumentos de função são passados nos registradores (para x86 processadores, ECX e EDX), e o restante são colocados na pilha da direita para esquerda.A rotina chamada pops esses argumentos da pilha antes de retornar.Normalmente, /Gr diminui o tempo de execução.
Observação |
---|
Tenha cuidado ao usar o __fastcall convenção de chamada para qualquer função escrita em linguagem de assembly embutido.O uso de registradores poderia entrar em conflito com o uso do compilador. |
Para C, o __fastcall o nome da função de usos de convenção de nomeação precedido por uma arroba (@) seguido pelo tamanho dos argumentos da função em bytes.Não é feita nenhuma conversão de maiúsculas.O compilador usa o modelo a seguir para a convenção de nomenclatura:
@function_name@number
Ao usar o __fastcall convenção de nomeação, use os arquivos de inclusão padrão.Caso contrário, você obterá referências externas não resolvidas.
especificações de __stdcall
A __stdcall argumentos de função são colocados na pilha da direita para esquerda, a função chamada pops e esses argumentos da pilha antes de retornar.
Para C, o __stdcall o nome da função de usos de convenção de nomeação precedido por um caractere de sublinhado ( _ ) e seguido por uma arroba (@) e o tamanho dos argumentos da função em bytes.Nenhuma conversão de maiúsculas é executada.O compilador usa o modelo a seguir para a convenção de nomenclatura:
_functionname@number
x 86 específicos
Esta opção não tem efeito sobre a simplificação de nome de funções e métodos do C++.A menos que declarado como extern "C", funções e métodos de C++ usam um esquema de decoração de nome diferente.Para obter mais informações, consulte Nomes decorados.
Para obter mais informações sobre convenções de chamada, consulte Convenções de chamada.
FIM x 86 específicos
Para definir esta opção de compilador no ambiente de desenvolvimento Visual Studio
Abra o projeto Páginas de propriedades caixa de diálogo.Para obter detalhes, consulte:Como: abrir páginas de propriedades do projeto.
Clique no C/C++ pasta.
Clique no Advanced página de propriedades.
Modificar o Convenção de chamada propriedade.
Para definir essa opção de compilador programaticamente
- Consulte CallingConvention.