在C中确定运行时变量的类型

在C中确定运行时变量的类型,c,types,runtime,C,Types,Runtime,我有几个char(array)、int和double类型的变量。有没有办法确定它们在运行时是什么类型的 例如,我正在寻找类似于: int dummyInt = 5; double dummyDouble = 5.0; dummyInt == int ? printf("yes, it's of int type\n") : printf("no, it's not of int type\n"); dummyDouble == int ? prin

我有几个char(array)、int和double类型的变量。有没有办法确定它们在运行时是什么类型的

例如,我正在寻找类似于:

int dummyInt = 5;    
double dummyDouble = 5.0;    
dummyInt == int ?
        printf("yes, it's of int type\n") : printf("no, it's not of int type\n");
dummyDouble == int ?
        printf("yes, it's of int type\n") : printf("no, it's not of int type\n");
显而易见的结果是:

是的,它是int类型的
不,它不是int型的


我之所以需要它,是因为我正在将数据从变量传输到SQL数据库(使用SQLite)。现在,根据使用的变量,每次运行程序时,标题都可以更改。因此,当我创建表时,我需要告诉它是否是VARCHAR、INTEGER、DOUBLE等。

不,在C中没有办法这样做。

不,你不能,但你为什么要这样做?C是静态类型的,所以当您声明
intdummyint=5
时,您已经知道它是一个
int

编辑:

现在,根据使用的变量,每次运行程序时,标题都可以更改。因此,当我创建表时,我需要告诉它是否是VARCHAR、INTEGER、DOUBLE等

这仍然没有多大变化。这些类型在编译时仍然是已知的,因此您可能只需要在定义SQL类型的实际变量旁边添加一个
#define
,例如:

int someVar;
#define SOMEVAR_SQL_TYPE "INTEGER"

完全超出规范,但尝试一个例子

< P>我有同样的问题,但是使用C++ +强>这不是C<强>,但可能存在等价。我必须使用标题,然后调用typeid()

我的代码看起来像:

#include typeinfo

int main()
{ 
    int a = 10;
    cout << typeid(int).name() << endl;
}
#包括类型信息
int main()
{ 
INTA=10;

cout我假设您希望有一个程序,在运行时之前您不知道对象的类型。例如,您希望实现一个多态排序算法,该算法在运行时之前不知道对象的类型(在这一点上,它只知道每个元素的大小,因为C是静态类型的,但即使这样也可能会崩溃,除非您实现自己的函数,这些函数独立于所有类型,并对对象执行所有位运算)


如果您确实想对上述内容执行某种多态方法,我建议您使用char指针,并在堆上为运行时所需的任何大小分配足够的空间。然后实现接收指向空间、元素大小和元素数量的指针的函数,并执行适当的比较/ari算术运算。此实现可能会变得非常复杂。如果您提供了一个确实知道类型的模块函数,那么它可能并不复杂,但您在编译时又重新知道了类型。

标准C中没有在运行时获取变量类型的工具;您需要在该模块中自己记账我不在乎


如果你需要用C语言创建一个通用容器,你必须想办法用某种类型的信息来标记容器中的每个元素。根据不同的方法,这可能需要大量的工作。

否。也许你应该解释一下为什么需要这样做,并提出一个更好的解决方案。你可能使用了错误的语言您应该编写示例psudo代码来演示更接近您所述用途的东西(将数据输入SQLite db)你的例子并没有真正说明问题,因为它是如此容易解决,因为类型是常数和已知的。一个更接近实际的程序的例子,你试图写的可能会提出其他解决这个问题的方法。C++(也包括各种类型的)。