Compartilhar via


Decoração do nome

A decoração de nome geralmente se refere a convenções de nomenclatura C++, mas também pode se aplicar a vários casos C. Por padrão, o C++ usa o nome da função, os parâmetros e o tipo de retorno para criar um nome de vinculador para a função. Considere a seguinte declaração da 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 arquivo extern "C" ou .c .cpp, .cxx ou /TP
Convenção de nomenclatura (__cdecl) _test ?test@@ZAXXZ
Convenção de nomenclatura de chamada rápida (__fastcall) @test@0 ?test@@YIXXZ
Convenção de nomenclatura de chamada padrão (__stdcall) _test@0 ?test@@YGXXZ
Convenção de nomenclatura de chamada de vetor (__vectorcall) test@@0 ?test@@YQXXZ

Use extern "C" para chamar uma função C do C++. extern "C" força o uso da convenção de nomenclatura C para funções C++ não de classe. Lembre-se das opções do compilador /Tc ou /Tp, que orientam 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 de vinculador que você não espera.

Ter protótipos de função que têm parâmetros incompatíveis também pode causar esse erro. A decoração de nome incorpora os parâmetros de uma função no nome final da função decorada. Chamar uma função com tipos de parâmetro que não correspondem aos da declaração de função também pode causar o erro LNK2001.

Atualmente, não há padrões para nomenclatura C++ entre fornecedores de compilador ou até mesmo entre versões diferentes de um compilador. Vincular arquivos de objeto compilados por outros compiladores pode não produzir o mesmo esquema de nomenclatura e pode causar externos não resolvidos.

Confira também

Erro das ferramentas de vinculador LNK2001