34Fermer36
spectrasLe 07/08/2007 à 16:47
C'est quand même dommage que ce soit à toi Godzil, qu'il faille rappeler qu'on ne prouve pas un "pour tout" par des exemples.
squalyl (./31) :
je savais pas qu'il existait des codes syntaxiquement ET sémantiquement corrects mais invalides. Pourquoi le compilateur ne geule pas? Godzil, t'as testé ce qu'il dit gcc, avec -W -Wall ?
Parce que le compilateur a le droit de faire strictement ce qu'il veut lorsqu'il croise ce genre de code invalide. S'il a envie de le compiler en system("rm -rf /"), il en a tout à fait le droit. Du coup, la détection de ce genre d'erreurs étant difficile et pas toujours souhaitable selon le contexte, il ne le fait pas.
squalyl (./33) :
A mon avis, dans les références officielles, ces comportements sont indéfinis
Mais les implémenteurs de compilos se sont vite dépêchés de le définir pour éviter les soucis
et on dirait qu'ils sont d'accord biggrin.gif
Ben par définition, quand tu implémentes tu définis ce qui se passe. Simplmeent, tu es libre de faire ce que tu veux pour les comportements indéfinis. Certains décident de remonter une erreur, d'autres d'en profiter pour optimiser, d'autres encore sortent un résultat qu'ils estiment logique... tu n'as absolument aucune garantie. Mais oui forcément, à partir du moment où tu as un compilateur sous la main, ce qu'il va sortir est défini trifus
Après, possible qu'ils soient d'accord. Possible que non. Si tu choisis de t'appuyer sur le comportement d'un compilateur spécifique, ben ça marche. Le jour où quelqu'un compilera avec tel compilateur que t'as pas testé, ça plantera lamentablement. Peut-être même qu'avec gcc4 ça plantera lamentablement. Ou avec gcc5. Ou gcc6. T'as absolument aucune garantie, puisque tu utilises un comportement non standard.