IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

FAQ C++ moderne et erreurs courantes

Ce ou ces sujets font partie d'une FAQ en cours d'écriture, vos retours sont les bienvenus.

Un comportement indéfini est relatif à l'exécution d'un code pour lequel le standard n'offre aucune garantie quant à son issue. On peut citer :

  • l'accès à la valeur d'une variable non initialisée ;
  • le déréférencement d'un pointeur non valide (note : un pointeur nul est la définition même d'un pointeur invalide) ;
  • les accès tableaux hors limites ;
  • un overflow (dépassement de valeur limite d'un type) ;
  • l'utilisation d'un dangling pointer ;
  • flush(stdin); ;
  • et pleins d'autres cas.

Cette absence de contrainte donne alors à chaque compilateur la liberté de vous avertir ou non et/ou de générer le code qui lui plaît. Ce comportement peut dès lors se manifester (ou non) de diverses façons non prédictibles :

  • une erreur de compilation ;
  • un avertissement, si vous avez passé la bonne option de compilation ;
  • l'obtention de valeurs aléatoires ;
  • l'obtention de caractères aléatoires ;
  • l'obtention de résultats erronés ;
  • l'obtention d'un comportement non attendu ;
  • un plantage durant l'exécution sur la partie précise relative au code erroné ;
  • un plantage plus tard, rendant sa localisation plus difficile ;
  • un plantage qui intervient de façon plus ou moins aléatoire ;
  • un programme qui fonctionnera malgré tout comme espéré…
  • … mais pourra avoir un comportement différent si :

    • vous ajoutez/supprimez du code,
    • vous changez le niveau des optimisations (-O0, -O1…),
    • changez de mode debug/release,
    • vous utilisez un autre compilateur,
    • vous exécutez le code sur un autre OS, une autre architecture (32/64 bits) ;
  • et nombre d'autres comportements dont le formatage de votre disque dur ou la sortie de démons de votre nez comme aiment le dire certains avec le sourire.

Cette liberté permet cependant aux compilateurs d'effectuer des optimisations.

À voir également

Créé le 1er janvier 2018  par Winjerome

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2021 Winjerome. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.