2010-01-29 13 views
20

Voglio stampare (o altrimenti accertare) il tipo di alcune variabili nel mio programma. C'è un buon modo per farlo? Per buono, intendo un modo che funziona, anche se significa intenzionalmente lanciare errori del compilatore.C'è un modo per stampare il tipo di una variabile/puntatore in C?

Ad esempio:

client.c:55: error: incompatible types in assignment 

è l'errore che sto ricevendo in questo momento. Quello che voglio è che mi dica qualcosa di simile:

client.c:55: error: attempting to assign type struct a to type struct b 

o una funzione che posso usare in questo modo:

printf(gettype(x)); 

che sarebbe uscita:

struct b 
+0

come può "funzionare" se non viene compilato? – KeatsPeeks

+0

Se "genera errori del compilatore", come può funzionare? –

+0

Ciò che intendo per "lavoro" è che mi dà il tipo in modo da poter correggere l'errore nel mio programma. Vedi la modifica. –

risposta

3

provare il debug utilizzando GDB , stamperà tutte le proprietà associate alla variabile incluso il suo tipo. Ma il tuo programma dovrebbe essere compilato prima di usare GDB.

+0

Se non riesci a costruire non puoi farlo – kursancew

1

Se si utilizza gcc o un compilatore compatibile gcc, è possibile utilizzare la parola chiave (ovviamente non standard e non portatile) typeof, che funziona in modo simile a sizeof.

+7

Purtroppo non puoi ottenere una stringa da 'typeof'. (Anche se su g ++ puoi usare 'typeid (typeof (x)). Name()'.) – kennytm

1

In C viene fornito un tipo quando si dichiara una variabile. Questa è l'unica informazione che il compilatore ha quando si lamenta dell'assegnazione (cioè, non utilizzerà il tipo di runtime dell'oggetto, ma il tipo statico che hai).

Vai al codice, trova la riga 55, controlla quali variabili ci sono e trova i tipi nel codice. In C non ci sono nemmeno sovraccarichi, i tipi sono statici e semplici come in qualsiasi lingua.

43

Ho appena scoperto come farlo.

printf("%d", variable); 

Se la variabile non è un int allora gcc -Wall si lamentano che i tipi non corrispondono - e stamperà il tipo di variabile, che è esattamente quello che stai cercando.

+0

Utile quando ti trovi in ​​un ambiente in cui non sai dove cercare le cose (ad esempio, nella mia situazione, programmazione con yacc). – Darthfett

+1

Questo è fuorviante quando si usano tipi di array che decadono in puntatori mentre vengono passati a 'printf'. – Zulan

Problemi correlati