Je me demande simplement s'il existe un moyen pratique de détecter si un dépassement survient avec n'importe quelle variable d'un type de données par défaut utilisé dans un programme C++ pendant l'exécution? Par commodité, je veux dire pas besoin d'écrire du code pour suivre chaque variable si elle est dans la gamme de son type de données chaque fois que sa valeur change. Ou s'il est impossible d'y parvenir, comment feriez-vous?Comment détecter un débordement en C++?
Par exemple,
float f1=FLT_MAX+1;
cout << f1 << endl;
ne donne pas d'erreur ou d'avertissement soit compilation avec "gcc -W -Wall" ou en cours d'exécution.
Merci pour votre intérêt!
Je spéculer que vous pourriez possible mettre en place un gestionnaire d'interruption pour le faire? En supposant que le débordement génère réellement une interruption. Comme vous pouvez le voir, je ne fais que spéculer ici, l'ajoutant ainsi comme un commentaire plutôt que comme une réponse. – korona
n'est-il pas préférable d'écrire du code qui empêche (ou rend plus difficile de se produire) les débordements plutôt que d'essayer de l'attraper en train de se produire? Je ne fais que jeter la pensée. – Jay
@Jay: pas nécessairement. Surtout en virgule flottante, il existe des classes d'algorithmes pour lesquelles le débordement est très, très rare, et la dépense de calcul supplémentaire pour l'empêcher complètement est très grande. Dans une situation de performance critique, vous pouvez utiliser l'algorithme rapide qui n'empêche pas le débordement et rejouer le calcul en un million pour lequel le dépassement se produit en utilisant l'algorithme prudent et lent qui empêche le débordement. –