Следующий код, я думаю, описывает то, что я пытаюсь сделать. В частности, я хочу привести указатель функции к универсальному типу функции, с той лишь разницей в сигнатуре, что это разные типы указателей.
Теперь я знаю, что существует требование, чтобы указатели функций были совместимыми , как обсуждалось в этом вопросе , но я не уверен, имеет ли аргумент разные Тип указателя удовлетворяет этому требованию совместимости.
Код компилируется и запускается, но, как и ожидалось, выдает предупреждения о назначении из несовместимого типа указателя. Есть ли какой-нибудь способ удовлетворить компилятор и добиться того, чего я добиваюсь?
#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;
}