如何在运行时检查C中变量的类型?

如何在运行时检查C中变量的类型?,c,type-conversion,C,Type Conversion,是否可以在代码中的任何给定点检查变量的类型 例如,我声明chary=1;函数intsomefunction(int)。然后我将y传递给someFunction,它将被转换为int,并最终返回int 我知道这是因为函数声明。然而,我想确认在someFunction中,变量实际上是int类型,从someFunction返回的变量也是int 这可以在C中完成,还是应该依赖函数声明C编程语言是否提供了在运行时检查变量类型的机制?在您的代码中,您可以依赖这样一个事实,即您收到的类型与它们的声明方式相对应。

是否可以在代码中的任何给定点检查变量的类型

例如,我声明
chary=1
;函数
intsomefunction(int)
。然后我将
y
传递给
someFunction
,它将被转换为
int
,并最终返回
int

我知道这是因为函数声明。然而,我想确认在
someFunction
中,变量实际上是
int
类型,从
someFunction
返回的变量也是
int


这可以在C中完成,还是应该依赖函数声明C编程语言是否提供了在运行时检查变量类型的机制?

在您的代码中,您可以依赖这样一个事实,即您收到的类型与它们的声明方式相对应。如果不是这样的话,你就不能编写任何非平凡的程序

但类型信息(用C表示)仅在编译时可用。在运行时,这些信息都不存在,因此没有标准的构建方法,例如,告诉什么类型的对象隐藏在随机指针后面。
如果您需要此类信息,请查看您的编译器是否有扩展(我不知道是否有扩展),或者使用为其提供基础架构的框架(我相信有类似的东西)。
如果你真的需要,也可以自己动手


或使用C++,它有一些运行时类型信息支持,一般来说是一个更复杂的类型系统,但这是完全不同的语言。

C类型主要存在于编译时。

您可以提高编译器的警告级别以获得更好的检查(例如gcc-ansi-pedantic-Wall),但我相信有些东西仍然会根据需要被强制执行


对于某些任务,您可以使用union进行手动类型管理,但在C中,通常最好仅依靠编译器进行类型检查。

someFunction中的变量实际上是一个
int
,因为您这么说。因此,C编程语言没有提供在运行时检查变量类型的机制?在C中,类型仅在编译时存在。在运行时,它只是一组移动的比特。如果你关心C++,(可以被认为是C的超集),特别是针对微软C++,对于对象类型,而不是原始数据类型,微软确实提供RTI(运行时类型信息)。参见@Mat,关于“如果不是这样的话,你就不能编写任何非平凡的程序”,那么你是说没有任何非平凡的PHP/Javascript程序?@Pacerier:PHP和Javascript(以及其他一些)是动态类型的,语言语义就是围绕着这一点构建的。C是静态类型的。@Mat,但是既然不使用
typeof
检查就可以构建非平凡的PHP/JS程序,为什么在C中不可能呢?@Pacerier:即使您没有在代码中显式编写
typeof
检查,根据所涉及表达式的实际(运行时)类型,动态类型语言的运行时/VM执行不同的操作(例如,将字符串解释为整数以执行乘法)。在C语言中,如果你最终弄乱了你的(静态)类型(例如错误的指针转换),你会得到未定义的行为-在运行时没有任何东西可以检查操作的有效性。@Mat,实际上PHP/JS代码根本不需要依赖类型转换。一次也没有。如果你不依赖它,它就不会被使用。你可以想象它就像C。