Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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.