2011-12-25 17 views
8

¿Es posible verificar qué tipo de variable es en cualquier punto dado a lo largo del código?¿Cómo verificar el tipo de la variable en C en tiempo de ejecución?

Por ejemplo, digamos, declaro char y = 1; y función int SomeFunction (int). Luego pasaré y a someFunction, se convertirá en int y finalmente se devolverá int.

Lo sé por la declaración de la función. Me gustaría, sin embargo, confirmar que dentro de someFunction, la variable es de hecho del tipo int y la variable devuelta desde someFunction es también un int.

¿Se puede hacer esto en C o se debe confiar en la declaración de función? ¿El lenguaje de programación C proporciona algún mecanismo para verificar el tipo de variable en el tiempo de ejecución?

+2

La variable dentro de 'someFunction' es _in fact_ an' int' porque usted lo dice. – knittl

+0

Entonces, ¿el lenguaje de programación C no proporciona ningún mecanismo para verificar el tipo de variable en el tiempo de ejecución? – JAM

+7

En C, los tipos solo existen en tiempo de compilación. En tiempo de ejecución, es solo un montón de bits moviéndose. – Mat

Respuesta

6

En su código, puede confiar en el hecho de que los tipos que se entregan corresponden a cómo fueron declarados. No podría escribir ningún programa no trivial si ese no fuera el caso.

La información de tipo, en C, solo está disponible en tiempo de compilación. En el tiempo de ejecución, no hay nada de esa información presente, por lo que no existe una forma estándar de compilación, por ejemplo, para decir qué tipo de objeto se esconde detrás de un puntero al azar.
Si necesita ese tipo de información, vea si su compilador tiene extensiones para ella (no sé si alguna), o use marcos que brinden infraestructura para eso (glib tiene cosas como esas, creo).
O haga rodar el suyo si realmente realmente lo necesita.

O use C++ que tiene algún tipo de soporte de información de tipo de tiempo de ejecución, y en general un sistema de tipo de letra más intrincado, pero ese es un lenguaje totalmente diferente.

+0

Gracias Mat. Buena respuesta – JAM

+0

@Mat, con respecto a * "No podría escribir ningún programa no trivial si ese no fuera el caso." *, ¿Está diciendo que no hay ningún programa PHP/Javascript no trivial? – Pacerier

+1

@Pacerier: PHP y Javascript (y muchos más) se tipean dinámicamente y la semántica del lenguaje se basa en eso. C está estáticamente estátipo. – Mat

0

Los tipos de C existen principalmente en tiempo de compilación.

Puede aumentar el nivel de advertencia de sus compiladores para obtener una mejor verificación (EG gcc -ansi -pedantic -Wall), pero creo que algunas cosas seguirán siendo coercionadas según sea necesario.

Puede usar una unión para la administración de tipo manual para algunas tareas, pero en C generalmente es mejor simplemente confiar en su compilador para verificar el tipo.

Cuestiones relacionadas