es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Puntero a función con retorno de tipo void* y parámetros de tipo void*

Escribí un puntero a función que tiene todos los void* para que pueda ser utilizado para cualquier valor numérico:
1. int
2. float
3. double.

Pero solo funciona para la función de adición de int.

Para las funciones de adición de float y double, arroja un error en tiempo de compilación.
¿Por qué sucede eso?

Si eliminas los comentarios de las dos últimas líneas de printf, recibirás un error.

“`
#include<stdio.h>

int int_add(int x, int y) {
return x + y;
}

float float_add(float x, float y) {
return x + y;
}

double double_add(double x, double y) {
return x + y;
}

void* do_operation(void* (<em>op)(void</em>, void<em>), void</em> x, void* y) {
return op(x, y);
}

void main(void) {

<pre><code>printf("Suma= %d\n",(int*) do_operation(int_add, 1, 2));
/*printf("Suma= %f\n",(float*) do_operation(float_add, 1.20, 2.50));*/
/*printf("Suma= %lf\n",(double*) do_operation(double_add, 1.20, 2.50));*/
</code></pre>

}
“`</stdio.h>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La razón por la que está funcionando solo para la función de suma de int y no para las funciones de suma de float y double es porque el puntero a la función do_operation tiene parámetros de tipo void*, pero las funciones de suma tienen tipos de parámetros diferentes (int, float y double). Cuando do_operation intenta llamar a las funciones float_add y double_add, pasa parámetros void* en lugar de parámetros float y double, lo cual resulta en un error de incompatibilidad de tipo en tiempo de compilación.

    Para hacer que el código funcione para todos los tipos numéricos, el puntero a la función do_operation debe modificarse para aceptar parámetros de tipo void* y luego convertirlos a sus respectivos tipos dentro de la función antes de pasarlos a las funciones de suma. Alternativamente, se pueden definir punteros a funciones separados para cada tipo de función de suma.

Comments are closed.