2010-01-29 21 views
20

Quiero imprimir (o de otra forma averiguar) el tipo de alguna variable en mi programa. ¿Hay una buena manera de hacerlo? De hecho, me refiero a una forma que funciona, incluso si significa arrojar intencionalmente errores de compilación.¿Hay alguna forma de imprimir el tipo de variable/puntero en C?

Por ejemplo:

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

es el error que estoy recibiendo en este momento. Lo que quiero es que me diga algo como:

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

o una función que pueda utilizar de este modo:

printf(gettype(x)); 

la que sería la salida:

struct b 
+0

¿cómo puede "funcionar" si no se compila? – KeatsPeeks

+0

Si "arroja errores de compilación", ¿cómo puede funcionar? –

+0

Lo que quiero decir con "trabajo" es que me da el tipo para que pueda corregir el error en mi programa. Ver la edición. –

Respuesta

3

tratar depuración utilizando BGF , imprimirá todas las propiedades asociadas con la variable, incluido su tipo. Pero, su programa debe compilar antes de usar GDB.

+0

Si no se puede construir no puede hacer esto – kursancew

1

Si está utilizando gcc o un compilador compatible con gcc, puede utilizar la palabra clave typeof (obviamente no estándar y no portátil), que funciona de forma muy similar a sizeof.

+7

Desafortunadamente no se puede obtener una cadena de 'typeof'. (Aunque en g ++ puedes usar 'typeid (typeof (x)). Name()'.) – kennytm

1

En C, proporciona un tipo cuando declara una variable. Esa es la única información que tiene el compilador cuando se queja de la asignación (es decir, no usará el tipo de tiempo de ejecución del objeto, sino el tipo estático que tiene).

Vaya al código, busque la línea 55, compruebe qué variables hay y encuentre los tipos en el código. En C no hay ni siquiera sobrecargas, los tipos son tan simples y estáticos como se obtienen en cualquier idioma.

43

Acabo de descubrir cómo hacerlo.

printf("%d", variable); 

Si la variable no es un int entonces gcc -Wall se quejan de que los tipos no coinciden - y se imprimirá el tipo de la variable, que es exactamente lo que busca.

+0

Útil cuando estás en un entorno donde no sabes dónde buscar cosas (por ejemplo, en mi situación, programando con yacc). – Darthfett

+1

Esto es engañoso cuando se usan tipos de matriz que se descomponen en punteros mientras se pasan a 'printf'. – Zulan

Cuestiones relacionadas