Pour tout le reste de ce que tu cites et réponds, j'ai un test pour toi, vu que tu sembles penser que les spécificités d'implémentations sont rares.
Il te faudra 2 compilateurs, plutôt répandus: Visual C++ 2008 et MinGW32.
Compiles et exécutes le code suivant sur chacun d'eux.
J'insiste, j'ai essayé uniquement avec C++, le C agira peut-être de la même façon dans les deux cas (ces langages ne sont pas les mêmes après tout)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
#include <stdio.h>
inline int increment(int &var)
{
return ++var;
}
int main()
{
int i=0;
printf("%d,%d\n",increment(i), increment(i));
i=0;
printf("%d,%d",++i, ++i);
return 0;
} |
Ce bout de code n'a rien à voir avec la taille des types, je te l'accorde. Son seul rôle est de te montrer que les spécifités d'implémentation doivent être prises au sérieux, car les résultats obtenus avec ces deux compilateurs diffèrent, et sont pourtant tous deux standard!
Quand j'ai utilisé cette astuce pour un code, j'avais "communément admis" que l'ordre de passage des données à une fonction était fixe, normé, standard, ce qui est entièrement faux: cela dépend du contexte (en gros, seul le cas ou le retour d'une fonction est attendu est fixe, si c'est une expression, le compilateur est libre de faire les "optimisations" qu'il veut. J'ai perdu 2 jours à comprendre pourquoi ce bout de code ne marchait pas sous windows mais marchait sur ma machine perso. Bizarrement, j'ai accusé sans savoir VS de merder

)
Partager