Aller au contenu


Photo

Tout Est Codable Ou Presque


  • Veuillez vous connecter pour répondre
686 réponses à ce sujet

#13 Alia Zanetsu

Alia Zanetsu

    Maîtresse du TEPOP

  • Membre
  • 2 342 messages
  • LocationOmnomnomville

Posté 29 mars 2012 - 19:01

Voui, ça m'étonne même pas T_T

ô Code, ô désespoir, ô effets de bord ennemis !
N'ai-je donc étudié que pour cet infamie ?
Et ne suis-je trempée dans multiples projets,
Que pour voir un jour tant de lignes codées ?
Mon ordi qu'avec respect j'entretiens,
Mon terminal, qui tant de fois compile,
Tant de fois lance GDB pour presqu'un rien,
Trahit donc mon esprit, rendu bien inutile ?
Ô cruels souvenirs de mes cours passés !
Ô TD de tant de jours, en un jour effacés !
Nouvelles lignes codées, fatales à mon bonheur !
Valeur de retour d'où tombe mon honneur !

(d'accord, je remet ma camisole et je vais faire la cuisine sans les mains)

Retrouvé \o/


#14 Klore

Klore

    Accro aux bambous

  • Membre VIP
  • 57 messages

Posté 29 mars 2012 - 19:59

int a = 7;
int b = 4;

a+=  (++a) + ((b++)--) - (--<img src='http://nfor.fr/public/style_emoticons/<#EMO_DIR#>/cool.png' class='bbc_emoticon' alt='B)' />;

System.out.println("a="+ a + " b="+<img src='http://nfor.fr/public/style_emoticons/<#EMO_DIR#>/cool.png' class='bbc_emoticon' alt='B)' />;

C'est du java, grosso modo : System.out.println(String) -> afficher le string dans la console.

Ca donne quoi d'après vous ? (sans tricher ^^)

EDIT RP : tenez pas compte du B (majuscule) c'est un b (minuscule)


Je vois bien un comportement indéfini ?

(Je fonctionne en C/C++ et je n'ai jamais touché au Java, mais je suppose que c'est à peu près identique à ce niveau.)

#15 Arbiter

Arbiter

    Cé Un CoVnAnT LoL!

  • Membre
  • 488 messages
  • Locationt'as qu'a trouver tout seul.

Posté 29 mars 2012 - 20:28

Perso, en général, j'essaye de coder proprement, j'ai donc pas ce genre de problèmes.

#16 RP

RP

    Bourguignon à la rose

  • Engineer
  • 1 233 messages
  • LocationParssa (À Parssa tout va bien)

Posté 29 mars 2012 - 20:35

Nop Klore, Pour ceux qui veulent un indice :
Spoiler


#17 Dr_Windu

Dr_Windu

    Avatar du Chaos

  • Engineer
  • 2 277 messages

Posté 29 mars 2012 - 20:36

Je dirais comme Klore, undefined behaviour. Je ne pense pas que l'ordre de traitement des effets de bord soit spécifié dans la norme, après il faudrait vérifier.

En particulier, je me souviens d'un effet rigolo qu'on avait découvert par hasard en C : l'ordre de traitement des varargs de "printf" est de droite à gauche. En gros :

int i = 0;
printf ("%i %i %i", ++i, ++i, ++i);

Affiche si je ne m'abuse le résultat : "3 2 1". Ou un truc du genre. (Faudrait tester, j'ai la flemme.)


PS : Oui, j'ai vu aussi le truc rigolo, que (x++) ne donne pas l'adresse mais la valeur de x, c'est ça ? Mais je persiste à penser qu'on est probablement en comportement indéfini.
FYI.png

We did not invent the Algorithm. The Algorithm consistently finds Chaos.
The Algorithm is banned in China. The Algorithm killed Lycos.
The Algorithm is under GPL. The Algorithm constantly finds Chaos.
This is not the Algorithm. This is close.

#18 RP

RP

    Bourguignon à la rose

  • Engineer
  • 1 233 messages
  • LocationParssa (À Parssa tout va bien)

Posté 29 mars 2012 - 20:40

Normalement ca ne doit pas compiler :P

#19 Klore

Klore

    Accro aux bambous

  • Membre VIP
  • 57 messages

Posté 29 mars 2012 - 21:07

Je dirais comme Klore, undefined behaviour. Je ne pense pas que l'ordre de traitement des effets de bord soit spécifié dans la norme, après il faudrait vérifier.

En particulier, je me souviens d'un effet rigolo qu'on avait découvert par hasard en C : l'ordre de traitement des varargs de "printf" est de droite à gauche. En gros :

int i = 0;
printf ("%i %i %i", ++i, ++i, ++i);

Affiche si je ne m'abuse le résultat : "3 2 1". Ou un truc du genre. (Faudrait tester, j'ai la flemme.)


PS : Oui, j'ai vu aussi le truc rigolo, que (x++) ne donne pas l'adresse mais la valeur de x, c'est ça ? Mais je persiste à penser qu'on est probablement en comportement indéfini.


T'es sûr que ton code compile ? Tu modifies la valeur de ta variable à plusieurs reprise dans ton appel de fonction. Etant donné qu'il n'y a pas de point de séquence à ce niveau, ton compilo ne peut pas te dire ce qui sera évalué en premier.

Aussi, le "problème" (qui n'est pas forcément un problème en soi) avec la fonction "printf", c'est qu'elle bufferise les données qu'on lui envoie. Elle flush les données lorsqu'elle rencontre une instruction lui indiquant une "newline" ou quand on le lui ordonne. Du coup, on peut avoir des comportements 'achement bizarres quand on ne fait pas attention à ce qu'on lui demande.

@RP : Tu parles de ton code Java ou de doc ? ^^ (Dans les deux cas, ça compile pas je pense XD)

#20 Alia Zanetsu

Alia Zanetsu

    Maîtresse du TEPOP

  • Membre
  • 2 342 messages
  • LocationOmnomnomville

Posté 29 mars 2012 - 21:15

Nan mais RP, quand je code ça compile jamais du premier coup... Sauf si y'a des segfault :P

Retrouvé \o/


#21 Arbiter

Arbiter

    Cé Un CoVnAnT LoL!

  • Membre
  • 488 messages
  • Locationt'as qu'a trouver tout seul.

Posté 29 mars 2012 - 21:27

Je dirais comme Klore, undefined behaviour. Je ne pense pas que l'ordre de traitement des effets de bord soit spécifié dans la norme, après il faudrait vérifier.

En particulier, je me souviens d'un effet rigolo qu'on avait découvert par hasard en C : l'ordre de traitement des varargs de "printf" est de droite à gauche. En gros :

int i = 0;
printf ("%i %i %i", ++i, ++i, ++i);

Affiche si je ne m'abuse le résultat : "3 2 1". Ou un truc du genre. (Faudrait tester, j'ai la flemme.)


PS : Oui, j'ai vu aussi le truc rigolo, que (x++) ne donne pas l'adresse mais la valeur de x, c'est ça ? Mais je persiste à penser qu'on est probablement en comportement indéfini.


Non, doc c'est totalement logique, Tu place tes arguments sur la pile en commençant par le dernier, ainsi en ASM, un printf("%d,%d",i,j) donnera un truc du genre:
push j
push i
push dword ptr <adresse_de_"%d,%d">
call printf
Donc forcément, ton code donnerais:
inc i
push i //3e argument
inc i
push i //2e
inc i
push i //1er
push dword ptr <adresse_de_"%d %d %d">
call printf
Comme quoi, même un "bête" cours sur les bases de l'asm, ca aide^^

#22 RP

RP

    Bourguignon à la rose

  • Engineer
  • 1 233 messages
  • LocationParssa (À Parssa tout va bien)

Posté 29 mars 2012 - 21:34

@RP : Tu parles de ton code Java ou de doc ? ^^ (Dans les deux cas, ça compile pas je pense XD)


Du code de doc, mais sinon le mien ne compile pas non plus effectivement. Réponse :
5++ ca ne marche pas car c'est une valeur et non une variable, (b++)-- dans mon code, ca revient a décrémenter une valeur :)

#23 Arbiter

Arbiter

    Cé Un CoVnAnT LoL!

  • Membre
  • 488 messages
  • Locationt'as qu'a trouver tout seul.

Posté 29 mars 2012 - 21:38

le code de doc compile, a noter que je donne la traduction théorique de l'appel d'une fonction en assembleur. le compilateur GNU C que j'ai ici (code::blocks) n'est pas d'accord avec moi. (il me donne 3 3 3)

Ps: pour le code de RP, on se posais justement comme question en cours ce que des truc du genre "--i++" donnerais.

#24 RP

RP

    Bourguignon à la rose

  • Engineer
  • 1 233 messages
  • LocationParssa (À Parssa tout va bien)

Posté 29 mars 2012 - 21:39

le code de doc compile, a noter que je donne la traduction théorique de l'appel d'une fonction en assembleur. le compilateur GNU C que j'ai ici (code::blocks) n'est pas d'accord avec moi. (il me donne 3 3 3)


Apparement, j'aurai parié que non pourtant :(


0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)