相关疑难解决方法(0)

为什么我不能将函数指针转换为(void*)?

我有一个函数,它接受一个字符串,一个字符串数组和一个指针数组,并在字符串数组中查找字符串,并从指针数组中返回相应的指针.因为我将它用于几个不同的东西,指针数组被声明为(void*)的数组,并且调用者应该知道实际上有什么类型的指针(因此它返回的返回值是什么类型的指针) ).

但是,当我传入一个函数指针数组时,在编译时会收到警告-Wpedantic:

铛:

test.c:40:8: warning: assigning to 'voidfunc' (aka 'void (*)(void)') from 'void *' converts
      between void pointer and function pointer [-Wpedantic]
Run Code Online (Sandbox Code Playgroud)

GCC:

test.c:40:8: warning: ISO C forbids assignment between function pointer and ‘void *’ [-Wpedantic]
   fptr = find_ptr("quux", name_list, (void **)ptr_list,
Run Code Online (Sandbox Code Playgroud)

这是一个测试文件,尽管警告确实正确打印"quux":

#include <stdio.h>
#include <string.h>

void foo(void)
{
  puts("foo");
}

void bar(void)
{
  puts("bar");
}

void quux(void)
{
  puts("quux");
}

typedef void (* voidfunc)(void);

voidfunc ptr_list[] = {foo, bar, quux};

char *name_list[] = {"foo", "bar", …
Run Code Online (Sandbox Code Playgroud)

c pointers function-pointers

11
推荐指数
4
解决办法
7897
查看次数

标签 统计

c ×1

function-pointers ×1

pointers ×1