Ordre d'evaluation.....en tout cas ca craint un peu! J'ai fait quelques
essais avec le programme suivant, assez bref, n'est ce pas :
#include <stdio.h>
main()
{
int a=0;
printf("%d %d %d\n", a, a+=1, a);
}
gcc version egcs-2.91.66 sur RedHat 6.2:
1 1 0
cc ou xlc (version IBM 4.0.2.0) sur IBM AIX 4.3.3:
0 1 1
gcc version 2.95.3 sur le meme IBM:
1 1 1
cc sur un HP9000 (version Hewlett Packard) en 10.20:
0 1 1
gcc version 2.95.2 sur le meme HP9000:
1 1 1
Le comportement est le meme avec g++/gcc et xlc/xlC. Dans le cas d'un
printf ca n'a pas d'effet de bords, mais dans le cas de fonctions
utilisant/modifiant des objets il n'y a plus aucune portabilite du code
si on enchaine plusieurs expressions dans la meme instruction avec
gcc/g++.
En C++, selon le standart de 1998, seul l'operateur = est evalue de la
droite vers la gauche
et l'operateur ',' devrait garantir une evaluation sequentielle, de la
droite vers la gauche, des expressions qu'il separe. Pas triste!
C'est grave.
Quelqu'un aurait il une version correcte de gcc/g++ qui m'affiche bien 0
1 1 ?
J'ai teste la version livree en standart sous RedHat7.2, pas mieux.
Patrick
--
===============================================================
| Equipe M.O.S.T. | http://most.hmg.inpg.fr |
| Patrick BEGOU | ------------ |
| LEGI | mailto:Patrick.Begou@hmg.inpg.fr |
| BP 53 X | Tel 04 76 82 51 35 |
| 38041 GRENOBLE CEDEX | Fax 04 76 82 52 71 |
===============================================================