Je suis en train d'écrire un programme qui fait un usage intensif de la fonction uint64_t
afin d'améliorer la compatibilité entre les plates-formes. Il se trouve qu'il y a beaucoup de possibilités de débordements dans mon programme, c'est pourquoi je veux utiliser le type fonctions de débordement intégrées dans gcc .
Malheureusement, ils ne sont définis que sur int
s, long int
s, long long int
et ainsi de suite. Les uintX_t
garantissent d'avoir toujours une taille de X bits, ce qui n'est pas le cas pour les types, par exemple, a long int
n'est pas garanti en 64 bits. Cela me fait penser que les fonctions de débordement intégrées ne peuvent pas être utilisées ici.
Comment résoudre ce problème maintenant ?
J'ai deux approches :
-
en utilisant le
UINT64_MAX
constante destdint.h
et de faire moi-même la prédiction de débordement. Cependant, je ne suis pas partisan de "réinventer la roue". -
en utilisant l'exemple
__builtin_add_overflow_p
pour ne vérifier que le débordement. Cependant, je ne suis pas sûr à 100 % qu'ils puissent être appliqués à la fonctionuint64_t
.
Quelle est la meilleure façon de procéder ? Suis-je en train de superviser quelque chose d'évident ?