Ceci est une ancienne révision du document !
Mangling
Visual C++ name mangling Archive du 06/07/2019 le 30/10/2019
Calling conventions Archive du 15/08/2019 le 30/10/2019
Microsoft C++ Name Mangling Scheme Archive du 20/07/2006 le 30/10/2019
External functions with the
__declspec(dllimport)
attribute have prefix__imp_
in all compilers except Borland.
C++ Name Mangling/Demangling Archive du 30/04/2002 le 30/10/2019
Les méthodes template ont un attribut weak
Le corps d'une méthode template
doit être identique quelque soit le fichier objet généré. Les méthodes template
étant compilés dans chaque fichier objet (possibilité de nombreux doublons), le compilateur va leur donner l'attribut weak
.
Si l'implémentation n'est toujours identique, le compilateur va en prendre une au hasard et la généraliser.
Exemple :
- template.h
#pragma once #include <iostream> class Entete { public: void go() { #ifdef HACK std::cout << "A" << std::endl; #else std::cout << "B" << std::endl; #endif } };
- ClasseA.h
#pragma once class A { public: void go(); };
- ClasseB.h
#pragma once class B { public: void go(); };
- ClasseA.cpp
#define HACK #include "Template.h" #include "ClasseA.h" void A::go() { Entete e; e.go(); // On devrait afficher "A". }
- ClasseB.cpp
#undef HACK #include "Template.h" #include "ClasseB.h" void B::go() { Entete e; e.go(); // On devrait afficher "B". }
- main.cpp
#include <iostream> #include "ClasseA.h" #include "ClasseB.h" int main() { A a; B b; a.go(); b.go(); }
Sortie 1 possible :
A A
Sortie 2 possible :
B B