#include
§MEVBCBfint main()
{
int a;
int b;
int c;
a = 16;
b = 2;
c = 10;
/*
* 1) on commence par évaluer l'expression
* a > 0 && a <= 15, laquelle constitue
* le 1er opérande de l'opérateur ?:.
* Celle-ci est fausse car les expressions
* a > 0 et a <= 15 sont vraie et
* fausse respectivement,
* 2) on évalue donc le 3eme opérande de l'opérateur
* ?:, c'est-à-dire l'expression a/b,
* 3) et enfin on effectue l'affectation.
*/
c += a > 0 && a <= 15 ? ++a : a/b;
printf( "c : %d\n", c ); ===> 18
/*
* Que dire de l'expression suivante? :
* ----------------------------------
*/
a > 30 ? b = 11 : c = 100;
/*
* Cette expression provoque une erreur
* à la compilation car le troisième
* opérande de l'opérateur ?: est c
* et non pas c = 100. De ce fait,
* l'expression a > 30 ? b = 11 : c
* est d'abord évaluée. Sa valeur est ensuite utilisée
* comme opérande de gauche de la dernière affectation.
* D'où l'erreur, car cette valeur n'est pas une g-valeur.
*
* On devrait écrire :
*/
a > 30 ? b = 11 : (c = 100);
return 0;
}