[C++] Question interro 3 2008-2009

Voir le sujet précédent Voir le sujet suivant Aller en bas

[C++] Question interro 3 2008-2009

Message  snake27 le Lun 22 Mar 2010, 16:16

Bonjour,

J'aurais une petite question sur ce code :
Code:

#include <iostream>
void f(signed char c) throw (float) {
          if (c < -3) throw 2.3f;
          if (c > 23) throw -314;
}
int main() {
          try {
              f(200);
              std::cout << "ok" << std::endl;
          } catch (double i) {
                std::cout << i << std::endl;
          } catch (...) {
              std::cout << "..." << std::endl;
          }
}

Lorsque qu'on appelle la fonction f avec 200, il affiche " ..."
tandis que si on appelle la fonction f avec 30, il plante a l'execution

Quelqu'un pourrait m'eclairez sur ce probleme? Il me faut juste la justification de ceci

merci

Michael

snake27

Nombre de messages : 17
Age : 28
Prénom : Michael
Date d'inscription : 08/03/2009

Revenir en haut Aller en bas

Re: [C++] Question interro 3 2008-2009

Message  Anthoblack le Lun 22 Mar 2010, 17:45

Peut-être qu'il sait pas convertir -314 en float...
Tu me diras "pourquoi ça fonctionne avec 200?"... Faudrait vérifier si 200 mis dans un char signé ne fait pas un nombre inattendu (et négatif)...

J'dis ça, j'dis rien... J'en sais trop rien mais je suggère Razz

Anthoblack

Nombre de messages : 764
Age : 28
Prénom : Anthony
Statut : Ex-étudiant
Localisation : Bruxelles
Date d'inscription : 11/03/2008

Revenir en haut Aller en bas

Re: [C++] Question interro 3 2008-2009

Message  Guest le Lun 22 Mar 2010, 23:31

snake27 a écrit:Bonjour,

J'aurais une petite question sur ce code :
Code:

#include <iostream>
void f(signed char c) throw (float) {
          if (c < -3) throw 2.3f;
          if (c > 23) throw -314;
}
int main() {
          try {
              f(200);
              std::cout << "ok" << std::endl;
          } catch (double i) {
                std::cout << i << std::endl;
          } catch (...) {
              std::cout << "..." << std::endl;
          }
}

Lorsque qu'on appelle la fonction f avec 200, il affiche " ..."
tandis que si on appelle la fonction f avec 30, il plante a l'execution

Quelqu'un pourrait m'eclairez sur ce probleme? Il me faut juste la justification de ceci

merci

Michael

- 200 fait dans un signed char exactement -56 donc une exception de type float est lancée et rattrapée par le dernier bloc catch.
- avec 30 c'est normal que ca plante.Une exception de type int est lancé. Or la fonction spécifie seulement qu'elle est susceptible de déclencher une exception de type float.Il s'agit d'une exception inattendue, il y a appel d'une fonction appelée unexcepected qui met fin à l'execution.

Guest
Invité


Revenir en haut Aller en bas

Re: [C++] Question interro 3 2008-2009

Message  Anthoblack le Mar 23 Mar 2010, 16:10

Ouf, j'étais pas loin Very Happy
Résolu, donc...

Anthoblack

Nombre de messages : 764
Age : 28
Prénom : Anthony
Statut : Ex-étudiant
Localisation : Bruxelles
Date d'inscription : 11/03/2008

Revenir en haut Aller en bas

Re: [C++] Question interro 3 2008-2009

Message  snake27 le Jeu 25 Mar 2010, 14:25

Un grand Merci pour cet eclaircissement

snake27

Nombre de messages : 17
Age : 28
Prénom : Michael
Date d'inscription : 08/03/2009

Revenir en haut Aller en bas

Re: [C++] Question interro 3 2008-2009

Message  Contenu sponsorisé Aujourd'hui à 08:46


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum