Compartir a través de


Decoración de nombres

La decoración de nombres normalmente hace referencia a las convenciones de nomenclatura de C++, pero también se puede aplicar a varios casos de C. De forma predeterminada, C++ usa el nombre de la función, los parámetros y el tipo de valor devuelto para crear un nombre del vinculador para la función. Considere la declaración de función siguiente:

void CALLTYPE test(void);

En la tabla siguiente se muestra el nombre del vinculador para varias convenciones de llamada.

Convención de llamada Archivo extern "C" o .c .cpp, .cxx o /TP
Convención de nomenclatura de C (__cdecl) _test ?test@@ZAXXZ
Convención de nomenclatura de llamada rápida (__fastcall) @test@0 ?test@@YIXXZ
Convención de nomenclatura de llamada estándar (__stdcall) _test@0 ?test@@YGXXZ
Convención de nomenclatura de llamada de vector (__vectorcall) test@@0 ?test@@YQXXZ

Use extern "C" para llamar a una función de C desde C++. extern "C" fuerza el uso de la convención de nomenclatura de C para funciones de C++. Tenga en cuenta los modificadores de compilador /Tc o /Tp, que indican al compilador que omita la extensión de nombre de archivo y compile el archivo como C o C++, respectivamente. Estas opciones pueden dar lugar a nombres del enlazador que no espera.

Tener prototipos de función con parámetros no coincidentes también puede producir este error. La decoración de nombres incorpora los parámetros de una función en el nombre de función representativo final. Llamar a una función con tipos de parámetro que no coinciden con los de la declaración de función también puede generar el error LNK2001.

Actualmente, no hay un estándar de denominación de C++ entre proveedores de compiladores, ni entre versiones diferentes de un compilador. Vincular archivos objeto compilados con otros compiladores puede no producir el mismo esquema de denominación y causar externos sin resolver.

Consulte también

Error de las herramientas del vinculador LNK2001