Trouver le type d'une variable

Signaler
Messages postés
1
Date d'inscription
mercredi 22 août 2007
Statut
Membre
Dernière intervention
22 août 2007
-
Messages postés
571
Date d'inscription
vendredi 30 décembre 2005
Statut
Membre
Dernière intervention
12 juillet 2012
-
Bonjour,
Comment tester le type d'une variable en C ?
D'avance, merci pour vos nombreuses reponses

10 réponses

Messages postés
571
Date d'inscription
vendredi 30 décembre 2005
Statut
Membre
Dernière intervention
12 juillet 2012
3
avec GCC, typeof
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
Le type exacte ? Je ne connais aucun moyen.
Le seul que je connaisse c'est par le poids de la variable (sizeof). Cependant, plusieurs types peuvent avoir le même poids.

Ceci dit, je ne vois aucune utilité à savoir le type de variable que l'on utilise dans un code puisque justement, tu devrais le savoir.

C++ (@++)
Messages postés
354
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
24 mars 2011
1
Tout a fait d'accord avec SAKingdom, tester le type d'une variable n'a aucun interet et n'est de toutes façons pas possible (à ma connaissance).

D@runia
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
En C++ c'est possible (RTTI), mais en C je ne crois pas

_____________________________________
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
Bien que possible en C++ ça reste une énorme connerie, c'est résolu à la compilation, alors à quoi cela peut-il bien servir puisque le développeur est tout de même censé savoir ce qu'il code.

ciao...
BruNews, MVP VC++
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
C'est pas forcément résolu à la compilation:

A* a;

if(...) {
  a = new A();
} else {
  a = new B();
}

Le type de a n'est pas connu

_____________________________________
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
On fait des logiciels avec de telles contorsions ?

ciao...
BruNews, MVP VC++
Messages postés
354
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
24 mars 2011
1
Ca me fait penser à la fonction SendMessage :

Il arrive qu'un pointeur sur un certain type de variable soit passé en LPARAM, mais la fonction utilise la valeur du HPARAM pour savoir comment elle doit caster le pointeur.

Je ne sais pas ce que tu veux faire, mais tu devrais peut etre proceder de la meme façon.

Il est vrai que c'est jouable en c++, mais je suis d'accord avec BruNews pour dire que c'est du "code bidouille".

D@runia
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
Le problème en C++ c'est que le code est obligé de connaître en dynamique le type d'une variable, notamment pour manipuler les appels de fonctions virtuelles via pointeurs : si on déclare un pointeur sur classe mère et qu'on lui attribue l'adresse d'une classe fille (base du polymorphisme), le code a besoin de savoir le type de l'objet pointé pour appeller la bonne fonction.
Cela est également utilisé dans les dynamic_cast et autres du genre...
Cependant je trouve aussi qu'utiliser explicitement la reconnaissance de type dans le code est loin d'être propre...
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Malheureusement il existe des cas où on veut effectuer une converison d'une classe dérivée
en classe de base, et dans ce cas le dynamic_cast reste la solution a utiliser, à mon avis plus propre que la définition d'une méthode virtuelle getType().

_____________________________________