使用不同的指针类型作为参数来转换函数指针

2024-02-24

我认为以下代码描述了我想要做的事情。具体来说,我希望将函数指针转换为通用函数类型,签名的唯一区别是指针类型不同。

现在,我知道函数指针需要兼容的正如所讨论的这个问题 https://stackoverflow.com/questions/559581/casting-a-function-pointer-to-another-type,但我不确定具有不同指针类型的参数是否满足兼容性要求。

该代码编译并运行,但正如预期的那样,给出了有关来自不兼容指针类型的赋值的警告。有什么方法可以满足编译器并实现我所追求的目标吗?

#include <stdio.h>

int float_function(float *array, int length)
{
    int i;
    for(i=0; i<length; i++){
        printf("%f\n", array[i]);
    }
}

int double_function(double *array, int length)
{
    int i;
    for(i=0; i<length; i++){
        printf("%f\n", array[i]);
    }
}


int main() 
{
    float a[5] = {0.0, 1.0, 2.0, 3.0, 4.0};    
    double b[5] = {0.0, 1.0, 2.0, 3.0, 4.0};

    int (*generic_function)(void*, int) = NULL;

    generic_function = &float_function;
    generic_function(a, 5);

    generic_function = &double_function;
    generic_function(b, 5);

    return 0;
}

恕我直言,最干净的方法是执行演员阵容inside功能。这将强制所有函数签名相同,并将强制转换排除在调用者的代码之外。 (例如,这就是 qsort() 想要的方式)

int double_function(void *p, unsigned size)
{
    double *array = p    
    unsigned uu;

    for(uu=0; uu < size; uu++){
        printf("%f\n", array[uu]);
    }
return 42;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用不同的指针类型作为参数来转换函数指针 的相关文章

随机推荐