我有几个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等。
答案 0 :(得分:5)
不,你不能,但为什么你甚至想这样做? C是静态类型的,因此当您声明int dummyInt = 5
时,您已经知道它是int
。
修改强>
现在,每次运行程序时标头都会改变,具体取决于使用的变量。因此,当我创建表时,我需要告诉它是否为VARCHAR,INTEGER,DOUBLE等。
这仍然没有太大变化。这些类型在编译时仍然是已知的,因此您可能只需要#define
和定义SQL类型的实际变量,例如:
int someVar;
#define SOMEVAR_SQL_TYPE "INTEGER"
答案 1 :(得分:1)
我假设你想要一个程序,在运行之前你不知道对象的类型。例如,你想实现一个多态排序算法,它直到运行时才知道对象的类型(此时,它只知道每个元素的大小,因为C是静态类型的,但即使这样也可能会崩溃,除非你实现自己的函数,这些函数独立于所有类型,并为对象执行所有位运算。)
如果你想为上述内容做某种多态方法,我建议你使用char指针并在堆上分配足够的空间,以满足运行时所需的大小。然后实现接收指向空间,元素大小和元素数量的指针的函数,并执行适当的比较/算术运算。这种实现可能变得非常复杂。如果你提供一个知道类型的模块函数,那么它可能并不复杂,但是你会在编译时回过头来知道类型。
答案 2 :(得分:1)
标准C中没有设施可以在运行时获取变量的类型;你应该在这方面做你自己的所有簿记。
如果需要在C中创建通用容器,则必须找出某种方法来标记容器中的每个元素以及某种类型信息。根据方法,可能需要做很多工作。
答案 3 :(得分:0)
不,没有办法在C中这样做。
答案 4 :(得分:0)
完全超出规范,但尝试here作为一个例子
答案 5 :(得分:-2)
我遇到了同样的问题,但是使用C ++ 这不是C ,但也许存在等价物。我不得不使用标题,然后调用typeid();
我的代码看起来像:
#include typeinfo
int main()
{
int a = 10;
cout << typeid(int).name() << endl;
}
我知道你可以共享头文件所以也许可以使它工作吗?
typeid的输出为每种类型使用了一个字母(特定于实现)。即unsigned int输出为'j'。
Here是我的问题,与您的问题类似。