Différences entre les versions de « Programmation C++/Conventions d'appel »

A compléter ...=Ajouter ceux de GCC pour Linux
(A compléter ...=Ajouter ceux de GCC pour Linux)
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 ===
== Conventions d'appels sous Windows ==
 
'''Attention : cette section sort du cadre du C++ standard et est spécifique à des développements sous Windows. Ces conventions d'appels n'existent pas sous UNIX et Linux.'''
 
=== 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 :
* <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 ===
* 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}} [httphttps://en.wikipedia.org/wiki/Calling_convention Calling Convention]
*{{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]