Bases de la programmation en C
Quelle description du comportement indéfini, au sens de la norme du langage C, est correcte ?
- AUn comportement sur lequel la norme n'impose rien ; le compilateur peut optimiser en supposant qu'il ne se produit jamais, et le résultat peut être inattendu
- BUn comportement dont chaque implémentation fixe le résultat, avec l'obligation de le documenter
- CUn comportement toujours détecté à l'exécution, qui affiche un message d'erreur et arrête le programme
Afficher la réponse et l'explication
Réponse : A. Un comportement sur lequel la norme n'impose rien ; le compilateur peut optimiser en supposant qu'il ne se produit jamais, et le résultat peut être inattendu
Un comportement indéfini est un comportement sur lequel la norme n'impose aucune exigence, comme le dépassement de capacité d'un entier signé, l'accès hors des bornes d'un tableau, le déréférencement d'un pointeur NULL ou l'utilisation après libération. Il peut arriver qu'il fonctionne comme prévu, mais comme le compilateur peut optimiser en supposant qu'il « ne se produit pas dans un programme correct », il suffit de changer les options d'optimisation ou la version du compilateur pour que le résultat change. En revanche, ce que l'implémentation choisit et doit documenter, comme la taille d'un int ou le fait que char soit signé ou non, s'appelle un comportement défini par l'implémentation. Avec gcc et clang, l'option -fsanitize=undefined détecte une partie des comportements indéfinis à l'exécution.
Continuer : 9 autres questions sur Bases de la programmation en C