具有不同指针类型参数的函数指针。未定义的行为?

时间:2018-05-15 13:24:55

标签: c function pointers arguments ansi

我无法找到这个答案的明确答案。我的函数指针指向两个函数,它们都将指针作为参数。同一程序中的指针大小相同。以下是未定义的行为吗?这里的关键部分是函数指针签名中的指针参数指向具有不同类型的对象。

#include <stdio.h>

struct Test
{
  int value;
};

int func1(void *userData)
{
  struct Test *test = userData;

  printf("func1: %i\n", test->value);

  return 0;
}

int func2(struct Test *userData)
{
  printf("func2: %i\n", userData->value);

  return 0;
}

int main()
{
  int (*func)(void *) = func1;
  struct Test test = {0};

  test.value = 9;

  func(&test);
  func = (int (*)(void *))func2;
  func(&test);

  return 0;
}

它编译并在我尝试过的所有编译器上运行正常。 Func1肯定是正确的(尽管不是类型安全,因为处理void *)。但是当我以这种方式使用/铸造时,我不确定Func2。

我基本上是在编写一个回调系统,并希望避免处理void *以确保安全,并避免代码生成进行维护。

谢谢!

0 个答案:

没有答案