2011-02-26 12 views
6

¿Tiene alguna forma de obtener el tipo de datos en C?¿Pude recuperar el tipo de datos de una variable en C?

Por ejemplo:

 
int foo; 

if (foo is int) 
{ 
    // do something 
} 

o algo así:

 
if (typeof(foo) == typeof(int)) 
{ 
    // do something 
} 

Gracias de antemano.

+4

es una int., Lo sabrá por el código fuente, ¡sin necesidad de reflexión! – nos

+1

Realmente no entiendo la pregunta. Si define foo como int, ¿por qué necesitaría obtener su tipo en tiempo de compilación después? la introspección es útil en la programación orientada a objetos para implementar el polimorfismo, pero no veo por qué la necesitarías en C. – Greg

Respuesta

10

Esto se denomina tipo de reflexión o reflexión y no es compatible con el lenguaje C. Probablemente tendrías que escribir tu propia biblioteca de reflexión, y sería un esfuerzo significativo.

+0

Gracias, ya me lo imagino. Algo como #define MY_INT y luego establezca otra variable para mantener mi tipo personalizado, ¿verdad? Gracias. – user464230

+1

o podría definir una estructura, donde un campo contiene un "typeid" y el otro campo es lo suficientemente grande como para contener cualquier valor que desee almacenar en la estructura. – Jimmy

+0

@Jimmy: ¿UNA VARIANTE? http://msdn.microsoft.com/en-us/library/ms221627.aspx –

2

El hecho de que foo es un int está ligado al nombre foo. Nunca puede cambiar Entonces, ¿cómo sería una prueba así de significativa? El único caso podría ser útil en macros, donde foo podría expandirse a variables o expresiones de tipo diferente. En ese caso, usted podría mirar a algunas de mis preguntas anteriores relacionados con el tema:

Type-generic programming with macros: tricks to determine type?

Determining presence of prototype with correct return type

+1

Estoy totalmente de acuerdo. – Greg

+0

No entendiste el punto ... de todos modos ... la pregunta fue resuelta por emddudley – user464230

0

La única vez que no vas a saber el tipo es si se define el tipo de foo por un typedef - si ese es el caso, tu ejemplo debería reflejarlo. ¿Y por qué necesitas algo dependiente del tipo? Es posible que haya una manera de resolver su problema real, pero no ha presentado su problema real.

Cuestiones relacionadas