什么是typeof的返回类型?

时间:2010-07-16 14:07:30

标签: c gcc typeof

我想提供一个元素的类型作为参数来初始化一个指向未知类型元素的指针数组

类似

void* init(type t)
  void* array = malloc(sizeof_type(t)*10));
  return array;
}

后来打电话给

   init(typeof(int))

但是我无法确定typeof的返回类型是什么。

我想sizeof_type认为可以使用

来实现
   malloc((type) 0);

提前致谢

PS:如果对于矢量实现,如果有人可以指向我一些灵活的代码我也会非常感谢

6 个答案:

答案 0 :(得分:3)

我通常不使用gnu(我认为它只在gnu C中),但我不认为它是正常意义上的表达式,你可以将它的值赋给变量然后使用它。我认为它只能在非常具体的环境中用作类型。

From the docs:

  

使用此关键字的语法   看起来像sizeof,但是构造   在语义上类似于类型名称   用typedef定义。

     

可以使用typeof-construct   可以使用typedef名称的任何地方。   例如,您可以在a中使用它   声明,演员或内部   sizeof或typeof。

答案 1 :(得分:3)

为什么你不能只使用sizeof? 类似的东西:

int c;
void *p = calloc( 10,sizeof(c) );

答案 2 :(得分:2)

你想要什么是不可能的。

typeof()实际上并不返回类型,因为它是在编译时计算的关键字。它由其参数类型的名称替换。

也许你可以 你不能使用预处理器的字符串化运算符来使它成为一个字符串,就像这个## typeof(a),但它仍然会当你在字符串中输入类型时,不可能使用malloc / cast。

答案 3 :(得分:1)

此:

#define INIT(t) (malloc(sizeof(t) * 10))

可以这样使用:

int* a = INIT(int);

或者可能是这样的:

void* b = INIT(typeof(c));

甚至是这样:

void* b = INIT(c);

sizeof(c) == sizeof(typeof(c))

答案 4 :(得分:0)

我知道您的问题没有被标记,但如果您碰巧能够使用C ++,您可能需要考虑使用模板类。像STL这样的库使用模板来提供(类型)通用容器和算法。

http://www.cplusplus.com/doc/tutorial/templates/

http://en.wikipedia.org/wiki/Template_%28programming%29

答案 5 :(得分:0)

您可以使用宏来实现此目的:

#define INIT(t) ((t*) init_1(sizeof(t)))

void *init_1(size_t sz) {
  void *array = malloc(sz * 10);
  return array;
}

然后使用like:

int *array = INIT(int);