Partilhar via


Decoração do nome

Decoração de nome geralmente se refere a convenções de nomenclatura do C++, mas pode ser aplicadas a um número de casos de C também. Por padrão, o C++ usa o nome da função, parâmetros e tipo de retorno para criar um nome de vinculador para a função. Considere a seguinte função:

void CALLTYPE test(void)

A tabela a seguir mostra o nome do vinculador para várias convenções de chamada.

Convenção de chamada

extern "C" ou. c arquivo

. cpp,. cxx ou /TP

Convenção de nomenclatura de C (__cdecl)

testar

? test@@ZAXXZ

Convenção de nomenclatura fastcall (__fastcall)

@test@ 0

? test@@YIXXZ

Convenção de nomenclatura padrão de chamada (__stdcall)

_test@0

? test@@YGXXZ

Convenção de nomenclatura Vectorcall (__vectorcall)

Test@@0

? test@@YQXXZ

Use extern "C" para chamar uma função C de C++. Extern "C" força o uso da convenção de nomenclatura de C para funções de C++ não seja da classe. Lembre-se de comutadores de compilador /Tc ou /TP, que instrui o compilador a ignorar a extensão de nome de arquivo e compilar o arquivo como C ou C++, respectivamente. Essas opções podem causar nomes que você não espera.

Ter protótipos de função que têm parâmetros incompatíveis também pode causar esse erro. Decoração de nome incorpora o nome decorado de função final os parâmetros de uma função. Chamando uma função com os tipos de parâmetro que não coincidem com aqueles na declaração de função também pode causar LNK2001.

Atualmente, há um padrão de nomeação entre fornecedores de compilador ou até mesmo entre versões diferentes de um compilador de C++. Arquivos de objeto compilados com outros compiladores de vinculação, portanto, talvez não produza o mesmo esquema de nomenclatura e, portanto, faz com que externos não resolvidos.

Consulte também

Referência

Erro das Ferramentas de Vinculador LNK2001