Partager via


Décoration de nom

La décoration de nom fait le plus souvent référence aux conventions de noms C++, mais elle peut s'appliquer aussi en C dans un certain nombre de cas. Par défaut, C++ utilise le nom de la fonction, les paramètres et le type de retour pour créer un nom destiné à l'éditeur de liens pour la fonction. Prenons la fonction suivante :

void CALLTYPE test(void)

Le tableau ci-dessous présente les noms destinés à l'éditeur de liens pour différentes conventions d'appel.

Convention d'appel

extern "C" ou fichier .c

.cpp, .cxx ou /TP

Convention de noms C (__cdecl)

_test

?test@@ZAXXZ

Convention d'affectation de noms Fastcall (__fastcall)

@test@0

?test@@YIXXZ

Convention de noms d'appels standard (__stdcall)

_test@0

?test@@YGXXZ

Utilisez extern "C" pour appeler une fonction C depuis C++. Extern "C" force l'utilisation de la convention de nom C pour des fonctions C++ non membres de classes. Prenez garde aux options du compilateur /Tc ou /TP, qui lui demandent d'ignorer l'extension du nom de fichier et de compiler le fichier en tant que C ou C++, respectivement. Ces options peuvent causer des noms inattendus.

Des prototypes de fonctions avec paramètres différents peuvent aussi causer cette erreur. La décoration de nom incorpore les paramètres d'une fonction dans le nom décoré final de la fonction. L'appel d'une fonction avec des types de paramètres qui ne correspondent pas à ceux de la déclaration de la fonction peut aussi causer LNK2001.

Il n'y a pour l'instant pas de norme pour l'affectation de noms C++ entre éditeurs de compilateurs ou même entre différentes versions d'un même compilateur. Donc la liaison de fichiers objets compilés avec d'autres compilateurs peut ne pas produire le même schéma d'affectation de noms donc causer des externes non résolus.

Voir aussi

Référence

Erreur des outils Éditeur de liens LNK2001