 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
lycopersium Lt


Registrado: 12 Oct 2002Mensajes: 90Ubicación: Roquetas de Mar - Almería
|
Publicado: Lun 12 May, 2003 8:57 pm Asunto: puntero a una función |
|
|
Hola, estoy intentando crear un puntero a una función con número de parámetros variables pero no lo consigo. Lo q pongo es, por ejemplo:
| Código: |
int multiplica(int,...);
int multiplica(int a,int b){
return a*b;
}
typedef int(*Tfuncion) (int,...);
Tfuncion X;
X=multiplica;
|
si no pongo el prototipo de multiplica dice q no puede convertir un tipo a otro, y si lo pongo da un error de linkado.
que tengo q hacer
Gracias |
|
| Volver arriba |
|
 |
d1rk_avngr Cdt


Registrado: 24 Dic 2002Mensajes: 15Ubicación: Mexico
|
Publicado: Lun 26 May, 2003 5:18 am Asunto: Punteros a funciones y funciones con parametros variable |
|
|
Hola, para que puedas utilizar los parametros variables necesitas conocer el funcionamiento de las macros va_list, va_start, va_end prototipadas en el header <stdarg.h> y para los punteros a funcion solo analiza el siguiente ejemplo sencillo.
/*
Programa en C que muestra la implementacion de una funcion con parametro variable y
punteros a funciones.
*/
#include <stdio.h>
#include <stdarg.h>
typedef int (*tipo_suma)(int, ...);
int suma_n(int, ...);
int main(){
int resultado;
tipo_suma psuma; /* puntero al tipo_suma */
psuma = suma_n; /* asignacion de la direccion de memoria de la funcion suma_n al ptr. psuma */
resultado = psuma(3,4,5,0);
printf("Resultado = %d", resultado);
printf("\nPresione enter por favor . . .");
getchar();
return 0;
}
/* suma_n: efectua la suma de n valores pasados como parametros y usa el cero (0) para
marcar el ultimo parametro a evaluar. */
int suma_n(int num, ...){
int suma = 0;
int t;
va_list paramptr; /* puntero a parametro */
/* inicializar paramptr */
va_start(paramptr, num); /* se inicializa con el primer parametro de la funcion */
/* sumar la serie */
while((t = va_arg(paramptr, int)) != 0){
suma += t;
}
/* cerrar la pila va_list */
va_end(paramptr);
suma+= num;
return suma;
}
Espero que te sirva y un saludo para todos los del foro...
Atentamente
D1rk_Avngr _________________ "Que no está muerto lo que yace eternamente, y con el paso de los evos, aun la muerte puede morir"... Abdul Alhazred. |
|
| Volver arriba |
|
 |
lycopersium Lt


Registrado: 12 Oct 2002Mensajes: 90Ubicación: Roquetas de Mar - Almería
|
Publicado: Lun 26 May, 2003 9:03 pm Asunto: |
|
|
Muchas gracias por el ejemplo, me ha resultado muy útil.
Saludos |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|