Decoración de nombres

Actualización: noviembre 2007

Name Decoration

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

void CALLTYPE test(void)

La tabla siguiente 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 (__cdecl)

_test

?test@@ZAXXZ

Convención de nomenclatura de Fastcall (__fastcall)

@test@0

?test@@YIXXZ

Convención de nomenclatura de llamada estándar (__stdcall)

_test@0

?test@@YGXXZ

Utilice 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 C++ no de clases. Preste atención a las opciones del compilador /Tc o /TP, que informan al compilador de que debe pasar por alto la extensión del nombre de archivo y compilar el archivo como C o C++, respectivamente. Estas opciones pueden dar lugar a nombres no esperados.

El uso de 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 para denominación de C++ entre fabricantes de compiladores, o entre versiones diferentes de un mismo compilador. Por ello, vincular archivos objeto compilados con otros compiladores puede no producir el mismo esquema de denominación y causar por tanto símbolos externos no resueltos.

Adiciones de comunidad

Mostrar: