C:具有未定义类型参数的函数参数

时间:2015-04-08 21:16:05

标签: c function types parameters

如何编写接受未定义参数的函数? 我想它可以这样工作:

void foo(void undefined_param)
{
    if(typeof(undefined_param) == int) {/...do something}

    else if(typeof(undefined_param) == long) {/...do something else}
}

我已经读过模板可以解决我的问题,但是在C ++中我需要用C语言。

我只是试图避免使用许多类似的代码编写两个函数。就我而言,我不会寻找intlong,而是寻找我定义的结构类型。

1 个答案:

答案 0 :(得分:0)

由于代码避免使用具有大量相似代码的两个函数,因此为2个包装函数编写一个大的辅助函数(每个结构类型都有1个函数)。

struct type1 {
  int i;
};

struct type2 {
  long l;
};

static int foo_void(void *data, int type) {
  printf("%d\n", type);
  // lots of code
  }

int foo_struct1(struct type1 *data) {
  return foo_void(data, 1);
}

int foo_struct2(struct type2 *data) {
  return foo_void(data, 2);
}

使用C11,使用_Generic,代码可以帮助您:Example@Brian评论

实施例

int foo_default(void *data) {
  return foo_void(data, 0);
}

#define foo(x) _Generic((x),   \
   struct type1*: foo_struct1, \
   struct type2*: foo_struct2, \
   default: foo_default        \
   )(x)

void test(void) {
  struct type1 v1;
  struct type2 v2;
  foo(&v1);  // prints 1
  foo(&v2);  // prints 2
}