Compartilhar via


cdecl

Específicos do Microsoft

Este é o padrão de convenção de chamada para programas c e C++.Porque a pilha é limpo pelo chamador, ele pode fazer vararg funções.O __cdecl convenção de chamada cria executáveis maiores que __stdcall, porque ele requer que cada chamada de função para incluir o código de limpeza da pilha.A lista a seguir mostra a implementação dessa convenção de chamada.

Elemento

Implementação

Ordem de passagem de argumento

Direita para a esquerda

Responsabilidade de manutenção de pilha

Chamando a função se desprenda os argumentos da pilha

Convenção de nome-decoration.

O caractere de sublinhado (_) é prefixado nomes, exceto quando a exportação de _ _ cdecl funciona dessa ligação c de uso.

Convenção de tradução de caso

Nenhuma conversão de caso realizado

ObservaçãoObservação

Para obter informações relacionadas, consulte Nomes decorados.

Na família de processadores Itanium (IPF) e processadores x64, __cdecl é aceito e ignorado pelo compilador; no IPF, por convenção, parâmetros são passados no registro.

Coloque o _ _cdecl modificador antes de uma variável ou um nome de função.Como o C, nomeação e convenções de chamada são o padrão, o único momento em que você precise usar _ _cdecl é quando você tiver especificado o /Gz (stdcall) ou a opção de compilador /Gr (fastcall).O /Gd forças de opção do compilador a __cdecl convenção de chamada.

Para funções de classe non-static, se a função é definida de fora de linha, o modificador de convenção de chamada não tem a ser especificado na definição de out-of-line.Ou seja, para métodos de membro não estático da classe, será adotada a convenção de chamada especificada durante a declaração no momento da definição.Dada a definição de classe,

struct CMyClass {
   void __cdecl mymethod();
};

Isso

void CMyClass::mymethod() { return; }

é equivalente a isso

void __cdecl CMyClass::mymethod() { return; }

Exemplo

No exemplo a seguir, o compilador é instruído a usar c nomeação e convenções para de chamada a system função:

// Example of the __cdecl keyword on function
int __cdecl system(const char *);
// Example of the __cdecl keyword on function pointer
typedef BOOL (__cdecl *funcname_ptr)(void * arg1, const char * arg2, DWORD flags, ...);

Consulte também

Referência

Argumento passando e convenções de nomenclatura

Palavras-chave C++