[Visual C++ 6] Gestion des overflows

Gestion des overflows [Visual C++ 6] - Programmation

Marsh Posté le 27-03-2001 à 16:37:56    

Salut
Vous savez ou je peux demander au compilateur vérifier les overflows. Autrement dit, vérifier que si:
 
unsigned char val (0->255);
 
val=255;
val++ =>ERROR ERROR ERROR
alors que sinon, val devient 0;
 
Merci
@+

Reply

Marsh Posté le 27-03-2001 à 16:37:56   

Reply

Marsh Posté le 27-03-2001 à 16:44:02    

Dans visual il me semble qu'il y avait une methode a remplacer. Elle est appellee en cas d'erreur mathematique. Le simple fait de l'ajouter a ton projet devrait suffir, cherche dans l'aide _math_exception il me semble.

Reply

Marsh Posté le 27-03-2001 à 20:44:01    

Merci d'avoir pris du temps à me répondre, mais cela ne m'aide pas bcp. Il ne s'agit pas de code directement, mais plutot d'option de compilation. Pareil que les "assert" mais que le test soit fait à chaque accès à la variable.
Merci
@+

Reply

Marsh Posté le 27-03-2001 à 20:51:30    

ce qu'il faut que tu fasses, c'est que dans le fonction dans laquelle tu fais l'appel qui peut provoquer un overflow, tu dois intercepter les exceptions.
donc un bon vieux try{} catch(){} des familles.
 
Et si tu as une exceptions, tu regardes si celles-ci est due à un overflow ou pas.
 
Tu peux faire ca à chaque appel d'une fonction.
 
Pour info:
0xC0000091 EXCEPTION_FLT_OVERFLOW  
The result was too big to represent
 
je ne crois pas qu'il y ait d'autre moyen. Mais peut être que je me trompe.
 
ceci dit, les assert c'est pas qu'une option de compilation... Puisque c'est toi qui doit les inclure un par un dans ton code...

Reply

Marsh Posté le 27-03-2001 à 20:52:36    

qu'est-ce que je peux peux faire comme fautes d'orthographe quand je commence à fatiguer.
Allez hop, on rentre à la maison ;-þ

Reply

Marsh Posté le 27-03-2001 à 23:00:03    

Attendez, je ne sais pas si c'est moi qui m'explique mal ou si vous ne me comprenez pas.
Lorsque on insert un assert dans du code, il est compilé avec le code uniquement dans certaine condition (mode debug et non pas release par exemple).
Je ne veux pas devoir rajouter du code. Je veux juste que le compilateur vérifie que jamais une variable soit en situation d'overflow.Ce que j'appelle overflow, c'est lorsque, par exemple, pour une variable définie dans un type permettant des valeurs de 0->255 (unsigned char), on incrément la valeur alors qu'elle était déja au maximum (ou invers.). Dans mon exemple, la variable passe à 0 et non pas 256. J'aimerais donc que le compilateur vérifie à chaque nouvelle affectation, la valeur que j'écris. Mais l'option doit pouvoir evidemment etre enlevé au moment de la compilation finale (release) Je sais que cela existe avec certains compilateur sous unix, je cherche la même chose mais sous Visual C++ 6.0
Voilà
Merci

Reply

Marsh Posté le 28-03-2001 à 01:07:44    

les header limits ou climits définissent les limites de chaque type.
on a FLT_MAX,DBL_MAX, INT_MAX...
et après on checke à la main.
 
sinon y'a des méthodes qui doivent marcher avec des templates
pour les types entiers, c'est pas trop dur sans passer pas là
il faut juste savoir qu'en non signé:
valmax = (unsigned type)(-1)
 
et d'ailleurs en unsigned
(1<<(sizeof(type)-2))-1+(1<<(sizeof(type)-2))
ça marche

Reply

Marsh Posté le 28-03-2001 à 03:29:53    

Je chercherais dans la doc du cote des #pragmas, plutot qu'une option de compil.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 28-03-2001 à 14:45:09    

J'avoue ne pas comprendre ton probleme :
-Tu voudrais verifier les overflow a la compil ? c'est typiquement une erreur run time. meme si le compilo le fait il ne verra que les plus betes...
 
-Sans ajouter de code copiler explictement la fonction _math_exception et y mettre un point d'arret devrait repondre a ta question il me semble ?

Reply

Marsh Posté le 28-03-2001 à 14:48:44    

janoscoder a écrit a écrit :

les header limits ou climits définissent les limites de chaque type.
on a FLT_MAX,DBL_MAX, INT_MAX...
et après on checke à la main.
 
sinon y'a des méthodes qui doivent marcher avec des templates
pour les types entiers, c'est pas trop dur sans passer pas là
il faut juste savoir qu'en non signé:
valmax = (unsigned type)(-1)
 
et d'ailleurs en unsigned
(1<<(sizeof(type)-2))-1+(1<<(sizeof(type)-2))
ça marche




 Le plus simple c'est numeric_limits<type>::max()

Reply

Marsh Posté le 28-03-2001 à 14:48:44   

Reply

Marsh Posté le 29-03-2001 à 08:21:00    

Je veux que le compilateur rajoute automatiquement du code pour vérifier l'affectation des variables. Et ainsi, lorsque mon code est garantie sans erreur, je peux virer cette option à la compil., recompiler et VOILA.
Je sais que cela existe sous d'autres compilateur, a 100%. Maintenant, sous Visual C++?
Je regarderai pour le math exception, mais... je ne dois pas devoir rajouter du code à chaque nouveau fichier cpp.
@+

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed