Premetto che è la prima volta che scrivo della funzioni a parametri variabili..
Quello che devo fare è scrivere una funzione a parametri variabili che indipendentemente dal tipo di dato in ingresso, sia in grado di restituirne il valore massimo tra i dati.
Da traccia la funzione deve contenere il numero dei dati di ingresso, come parametro fisso.
L'ho pensata utilizzando librerie per i vari tipi di dati, con i rispettivi confronti.
(Posso dare come parametro fisso di questo tipo di funzione un puntatore a funzione ?! )
Considerando l'esempio di tipi di dati INT..
main.c
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include "datoINT.h"
typedef int (*COMPARE)(void * , void * );
void * myMax (COMPARE compare, int quanti,...);
void * myMax(COMPARE compare, int quanti,...)
{
void *x=NULL; void *max=NULL;
va_list argp;
va_start(argp, quanti);
max=va_arg(argp,void *);
quanti--;
while (quanti-- >0)
{
x=va_arg(argp,void *);
if(compare(max,x)>0) max=x;
}
va_end(argp);
return max;
}
int main()
{
void * max;
max=myMax(compareINT,4,2,10,6,4);
printf("Il massimo tra 2,3,6,4: %d\n",*(int*)max);
return 0;
}
datoINT.h
#ifndef DATOINT_H_INCLUDED
#define DATOINT_H_INCLUDED
int compareINT(void * a, void * b);
#endif // DATOINT_H_INCLUDED
datoINT.c
#include <stdio.h>
#include <stdlib.h>
#include "datoINT.h"
int compareINT (void * a, void * b)
{
int a1= *(int*)a; //errore segmentation Fault
int b1= *(int*)b;
return a1-b1;
}
L'esecuzione si interrompe per un errore di segmentation fault al rigo che ho commentato.
Ed inoltre non credo di passare in maniera corretta l'input alla funzione.. mmm..