« Programmation C++/Conventions d'appel » : différence entre les versions
Contenu supprimé Contenu ajouté
Aucun résumé des modifications |
A compléter ...=Ajouter ceux de GCC pour Linux |
||
Ligne 14 :
Pour l'avant dernier point, le désempilage des paramètres est toujours effectué par le code appelant lorsque la fonction a un nombre variable d'arguments, car seul le code appelant connait assuremment le nombre de paramètres qu'il a empilé.
=== Spécifier la convention d'appel ===▼
▲=== Spécifier la convention d'appel ===
La convention d'appel est spécifiée juste avant le nom de la fonction.
Parmi les conventions d'appel possibles :
Ligne 25 ⟶ 22 :
* <code>__fastcall</code> : Passage de certains paramètres dans les registres,
* <code>thiscall</code> : Convention d'appel utilisée implicitement par défaut par les fonctions définies dans une classe car il ajoute un paramètre supplémentaire : la référence à l'objet <code>this</code>. Ce mot clé ne peut être utilisé.
* <code>pascal</code> :
* ...▼
* <code>vectorcall</code> :
<!-- A compléter -->▼
▲<!-- A compléter ... -->
=== Différences entre les conventions d'appel ===
Ligne 68 ⟶ 67 :
* Type des exceptions lancées,
* Nom de la classe où se situe la fonction.
Par exemple, pour la fonction <code>void h(int, char)</code> le nom généré dépend du compilateur :
* GCC 3+, Clang 1+ : <code>_Z1hic</code>
* GCC 2.9x : <code>h__Fic</code>
* Microsoft Visual C++ : <code>?h@@YAXHD@Z</code>
* Borland C++ : <code>@h$qizc</code>
* SunPro CC : <code>__1cBh6F_v_</code>
▲* ...
Chaque compilateur utilise un nommage différent. Il est donc difficile d'utiliser une librairie qui n'a pas été compilée avec le même compilateur que l'application l'utilisant.
== Liens ==
*{{en}} [
*{{en}} [https://en.wikipedia.org/wiki/X86_calling_conventions#Callee_clean-up X86 Calling Convention]
*{{en}} [http://www.hackcraft.net/cpp/MSCallingConventions/ Calling Conventions in Microsoft Visual C++]
*{{en}} [https://en.wikipedia.org/wiki/Name_mangling Name mangling]
|