Est-il possible d'imprimer le type d'une variable/pointeur en C?
Je veux imprimer (ou savoir) le type d'une variable dans mon programme. Est-il une bonne façon de le faire? Par la bonne, je veux dire d'une manière qui fonctionne, même si cela signifie intentionnellement jeter des erreurs du compilateur.
Par exemple:
client.c:55: error: incompatible types in assignment
est l'erreur que je reçois à l'instant. Ce que je VEUX c'est de me dire quelque chose comme:
client.c:55: error: attempting to assign type struct a to type struct b
ou une fonction que je peux utiliser de la sorte:
printf(gettype(x));
qui de sortie:
struct b
- comment peut-il "travail" si elle ne marche pas compiler ?
- Si elle "jette les erreurs de compilation", comment peut-elle travailler?
- Ce que je veux dire par "travail", il me donne le type afin que je puisse corriger l'erreur dans mon programme. Voir la modifier.
- Certains compilateurs permettent un réglage de verbosité - essayer. Sinon, il suffit de regarder le code. Un décent IDE va généralement de rechercher automatiquement les types de variables de sorte que vous pouvez voir le type en survol ou clic droit sur le nom de la variable.
- Pour augmenter le niveau de verbosité, donnez -Wall-pedantic options de votre compilateur gcc. Cela devrait vous donner quelques informations supplémentaires au sujet de vos erreurs.
Vous devez vous connecter pour publier un commentaire.
essayer de débogage à l'aide de GDB, il permet d'imprimer toutes les propriétés associées à la variable dont c'est le type. Mais, votre programme doit compiler avant d'utiliser GDB.
Je viens de découvrir comment faire cela.
Si la variable n'est pas un int alors
gcc -Wall
va se plaindre que les types ne correspondent pas, et affichera le type de la variable, ce qui est exactement ce que vous cherchez.printf
.Si vous utilisez gcc ou gcc-compatible compilateur, alors vous pouvez utiliser l' (évidemment non standard et non portable) typeof mot-clé, qui fonctionne un peu comme sizeof.
typeof
. (Bien sur g++, vous pouvez utilisertypeid(typeof(x)).name()
.)Dans C à vous fournir un type lorsque vous déclarez une variable. C'est la seule information que le compilateur a quand il se plaint de la mission (qui est, il ne sera pas utiliser le runtime type de l'objet, mais le type statique que vous avez).
Aller au code, recherchez la ligne 55, vérifier quelles sont les variables y et de trouver le types dans le code. En C il n'y a même pas les surcharges, les types sont comme statique et simple qu'il obtient dans n'importe quelle langue.