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

时间:2010-10-11 17:55:51

标签: 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 ?
        printf("yes, it's of int type\n") : printf("no, it's not of int type\n");

明显的结果将是:

  

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

嗯,我之所以需要它,是因为我将数据从变量传输到SQL数据库(使用SQLite)。现在,每次运行程序时标头都会改变,具体取决于使用的变量。因此,当我创建表时,我需要告诉它是否为VARCHAR,INTEGER,DOUBLE等。

6 个答案:

答案 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是我的问题,与您的问题类似。