Re: A question bete, reponse idiote

Aujourd hui j’essaie d expliquer le probleme pose par Moktar il y a bien longtemp (c.f http://www.geekzone…reponse-idiote/)

En gros la question etait que fait ce bout de code :

[CODE]
#include <stdio.h>
int main(int argc, char* argv[])
{
int C = 0;

if( C>C++ )
printf(“C > C++\n”) ;

return 0;
}
[/CODE]

Et je voullais faire le malin en montrer que gcc aller afficher le string mais en faites gcc version 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.9.00) ne fait rien.

Je suis assez decu.

Est ce que quelqu’un sait pourquoi gcc aurait changer de strategie?

Koubiak

Je connaissais pas cette problématique, j’avoue que ça m’étonne. J’ai « toujours » (j’ai pas tant d’xp de ça non plus) appris que
c > c++ équivalait à c>c, puis c = c+1 et que c > ++c faisait les 2 instructions dans l’ordre inverse.

On avait même eu un cours là dessus à l’iut, on utilisait gcc (je sais pas quelle version, c’était en 2007) et à chaque fois il faisait bien l’incrément avant avec ++c, et après avec c++.

edit : oups, j’ai pris le pb dans le mauvais sens :smiley:

euh… What?
Je vois pas le probleme, la, si je decompose:
C=0
if(C>C) //if(0>0) donc la condition est fausse.

Return 0;

Donc oui, ca fait rien et c’est normal.

LoneWolf
J’ai raté quoi?

Il faut regarder le Thread d’origine

“Résultat indéfini” > La chaine pourrait s’afficher.

Un peu comme comparer une valeur définie et un pointeur NULL.

http://www.microsoft.com/en-us/download/details.aspx?id=18408

Enjoy. (Et le fait que ca soit pas defini n’empeche pas les mecs qui font les compilos de faire des trucs logiques et les mecs qui codent d’eviter ces pitfalls hein)

Je sais bien que c est pas defini. Je suis juste surpris que gcc ait change sa facon d’interpreter le probleme.

Ana-l merci pour le lien :slight_smile: