Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Nom de la fonction ayant lancé l'exception

13 réponses
Avatar
Faussard Guillaume
Salut,

je voulais savoir s'il existait un moyen simple de savoir quelle fonction a
lancé
telle ou telle exception. Je m'explique:

actuellement, je fais les choses de cette maniere:

void classeA::methode1() {
try {
if(blabla)
throw Erreur("ClasseA::methode1()");
}
}
catch(Erreur erreur) {
erreur.affiche();
}

Ainsi, quand je récupère mes exception, je peux afficher à l'écran le nom de
la fonction qui l'a lancée
et ainsi savoir où se trouve l'endroit quasi-exact ou a eu lieu le problème.
Mais bon, c'est vraiment pas
très joli, et en plus, ça peut être source d'erreur puisque le nom de la
fonction est "entré à la main"... Il
n'existe pas une méthode plus propre pour connaitre l'origine d'une
exception ?

Merci ^^

3 réponses

1 2
Avatar
James Kanze
Jean-Marc Bourguet writes:

|> Gabriel Dos Reis writes:

|> > Jean-Marc Bourguet writes:

|> > | C'est pas du C99, __FUNCTION__?

|> > non, cela aurait été trop facile d'homologuer une pratique
|> > existante :-)

|> > C99 l'appelle __func__.

|> Devinons, parce que __FUNCTION__ ressemble a une macro et que ce
|> ne peut pas en etre une?

Rien n'aurait empeché de prédéfinir le macro :

#define __FUNCTION__ __func__

si vraiement il ne voulait pas que __FUNCTION__ ne soit pas un macro.

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Avatar
James Kanze
Gabriel Dos Reis writes:

|> Jean-Marc Bourguet writes:

|> | Gabriel Dos Reis writes:

|> | > Jean-Marc Bourguet writes:

|> | > | C'est pas du C99, __FUNCTION__?

|> | > non, cela aurait été trop facile d'homologuer une
|> | > pratique existante :-)

|> | > C99 l'appelle __func__.

|> | Devinons, parce que __FUNCTION__ ressemble a une macro et que ce
|> | ne peut pas en etre une?

|> Cela peut être une explication officielle d'un porte paraole du
|> comité :-)

|> Je n'ai la moindre idée de comment les débats se sont déroulés.

Je n'ai eu que des brins -- je sais qu'il en était question. Et que
certains voulait __FUNC__ : puisque __FILE__, __LINE__, etc. avaient
tous exactement quatre caractères alpha...

Je peux accepter qu'ils aient voulu que le tableau même ne
s'appelle pas __FUNCTION__. Mais ils auraient du alors définir un
macro qui résolvait au nom du tableau. Et la seule justification
acceptable (AMHA, éviment) à ne pas utiliser __FUNCTION__, c'est
que d'autres compilateurs que g++ avaient aussi la même
fonctionnalité, avec un autre nom.

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Avatar
Gabriel Dos Reis
James Kanze writes:

| Gabriel Dos Reis writes:
|
| |> Jean-Marc Bourguet writes:
|
| |> | Gabriel Dos Reis writes:
|
| |> | > Jean-Marc Bourguet writes:
|
| |> | > | C'est pas du C99, __FUNCTION__?
|
| |> | > non, cela aurait été trop facile d'homologuer une
| |> | > pratique existante :-)
|
| |> | > C99 l'appelle __func__.
|
| |> | Devinons, parce que __FUNCTION__ ressemble a une macro et que ce
| |> | ne peut pas en etre une?
|
| |> Cela peut être une explication officielle d'un porte paraole du
| |> comité :-)
|
| |> Je n'ai la moindre idée de comment les débats se sont déroulés.
|
| Je n'ai eu que des brins -- je sais qu'il en était question. Et que
| certains voulait __FUNC__ : puisque __FILE__, __LINE__, etc. avaient
| tous exactement quatre caractères alpha...

comme __STDC_HOSTED__, __STDC_VERSION__, __STDC_IEC_559__,
__VA_ARGS__, __STDC_IEC_559_COMPLEX__ ? :-)

| Je peux accepter qu'ils aient voulu que le tableau même ne
| s'appelle pas __FUNCTION__. Mais ils auraient du alors définir un
| macro qui résolvait au nom du tableau. Et la seule justification
| acceptable (AMHA, éviment) à ne pas utiliser __FUNCTION__, c'est
| que d'autres compilateurs que g++ avaient aussi la même
| fonctionnalité, avec un autre nom.

c'est pour cela qu'on parle de standardiser la pratique existante <g>

-- Gaby
1 2