Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
4057 connectés 

 


Dernière réponse
Sujet : [Visual C++ 6] Gestion des overflows
korben 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.
@+

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
korben 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.
@+
BENB

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()

BENB 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 ?
gilou Je chercherais dans la doc du cote des #pragmas, plutot qu'une option de compil.
A+,
janoscoder 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
korben 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
SoWhatIn22 qu'est-ce que je peux peux faire comme fautes d'orthographe quand je commence à fatiguer.
Allez hop, on rentre à la maison ;-þ
SoWhatIn22 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...
korben 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
@+
BENB 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.
korben 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
@+

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)