Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
lang:cpp:lieur [2019/11/16 20:05] – On met l'exemple que sur GitHub root | lang:cpp:lieur [2023/07/28 09:48] (Version actuelle) – [Mangling] : ajout de "Demangler online" root |
---|
[[http://www.kegel.com/mangle.html|C++ Name Mangling/Demangling]] {{ :lang:cpp:lieur:c_name_mangling_demangling_2019-10-30_16_05_08_.html |Archive du 30/04/2002 le 30/10/2019}} | [[http://www.kegel.com/mangle.html|C++ Name Mangling/Demangling]] {{ :lang:cpp:lieur:c_name_mangling_demangling_2019-10-30_16_05_08_.html |Archive du 30/04/2002 le 30/10/2019}} |
| |
===Les méthodes template ont un attribut weak=== | * Demangler on-line |
| |
| https://d.fuqu.jp/c++filtjs/ |
| |
| https://demangler.com |
| ===Les méthodes définies dans un entête 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''. | 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. | Si l'implémentation n'est toujours identique, le compilateur va en prendre une au hasard et la généraliser. |
| |
[[https://github.com/bansan85/wiki_le_garrec_fr/tree/master/cpp/template/weak|POC sur GitHub]] | * Exemple : |
| |
| {{gh>https://github.com/bansan85/wiki_le_garrec_fr/blob/master/cpp/linker/weak/Entete.h}} |
| |
| {{gh>https://github.com/bansan85/wiki_le_garrec_fr/blob/master/cpp/linker/weak/ClasseA.h}} |
| |
| {{gh>https://github.com/bansan85/wiki_le_garrec_fr/blob/master/cpp/linker/weak/ClasseB.h}} |
| |
| {{gh>https://github.com/bansan85/wiki_le_garrec_fr/blob/master/cpp/linker/weak/ClasseA.cpp}} |
| |
| {{gh>https://github.com/bansan85/wiki_le_garrec_fr/blob/master/cpp/linker/weak/ClasseB.cpp}} |
| |
| {{gh>https://github.com/bansan85/wiki_le_garrec_fr/blob/master/cpp/linker/weak/main.cpp}} |
| |
| * Symboles : |
| |
| {{gh>https://github.com/bansan85/wiki_le_garrec_fr_travis/blob/master/cpp/linker/weak/ClasseA.cpp.nm}} |
| |
| {{gh>https://github.com/bansan85/wiki_le_garrec_fr_travis/blob/master/cpp/linker/weak/ClasseB.cpp.nm}} |
| |
| On voit que le symbole ''Entete::go()'' est défini deux fois avec l'attribut weak. Mais le ''#define'' étant différent, les deux implémentations sont différentes. |