Décoration de nom

La décoration de nom se rapporte généralement aux conventions d'affectation de noms C++, mais peut également s'appliquer à un certain nombre de cas du C. Par défaut, C++ utilise le nom de la fonction, les paramètres et le type de retour pour créer un nom d'éditeur de liens pour la fonction. Considérez la déclaration de fonction suivante :

void CALLTYPE test(void);

Le tableau suivant montre le nom de l'éditeur de liens pour différentes conventions d'appel.

Convention d'appel extern "C" ou .c fichier .cpp, .cxx ou /TP
Convention d'affectation de noms C (__cdecl) _test ?test@@ZAXXZ
Convention d’affectation de noms d’appel rapide (__fastcall) @test@0 ?test@@YIXXZ
Convention d’affectation de noms d’appel standard (__stdcall) _test@0 ?test@@YGXXZ
Convention de nommage des appels vectoriels (__vectorcall) test@@0 ?test@@YQXXZ

Permet extern "C" d’appeler une fonction C à partir de C++. extern "C" force l’utilisation de la convention d’affectation de noms C pour les fonctions C++ non de classe. Tenez compte des commutateurs du compilateur /Tc ou /Tp, qui indiquent au compilateur d’ignorer l’extension de nom de fichier et de compiler le fichier en C ou C++, respectivement. Ces options peuvent entraîner des noms d’éditeur de liens que vous n’attendez pas.

Des prototypes de fonctions qui ont des paramètres non correspondants peuvent également provoquer 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 les types de paramètres qui ne correspondent pas à ceux de la déclaration de fonction peut également entraîner LNK2001.

Il n’existe actuellement aucune norme pour le nommage C++ entre les fournisseurs du compilateur ou même entre différentes versions d’un compilateur. La liaison de fichiers objet compilés par d’autres compilateurs peut ne pas produire le même schéma de nommage et peut entraîner des externes non résolus.

Voir aussi

Erreur des outils Éditeur de liens LNK2001