Originariamente inviato da xnavigator
questa funzione non fa altro che ritornare il valore più grande tra 2 numeri dati in input.
se però questi 2 valori sono uguali dovrebbe tornare un valore differennte da int che io potrei riconscore
Non puoi, la funzione è dichiarata come short int e solo uno short int puoi restituire. Nell'esempio in questione si potrebbe fare o come ha detto oregon (restituire -1, 0 o 1 a seconda che il primo numero sia minore, uguale o maggiore del secondo, come consuetudine delle funzioni di confronto in C) oppure restituire indifferentemente value1 o value2 nel caso in cui siano uguali (se lo scopo della funzione è essere semplicemente un helper per ottenere il valore maggiore), oppure ancora utilizzare un approccio combinato:
codice:
short check_max( short value1, short value2, short * compareResult)
{
if( value1>value2 )
{
if(compareResult!=NULL)
*compareResult=1;
return value1;
}
else if ( value1<value2 )
{
if(compareResult!=NULL)
*compareResult=-1;
return value2;
}
else if ( value1==value2 )
{
if(compareResult!=NULL)
*compareResult=0;
return value1;
}
}
.
In questa maniera un chiamante che vuole sapere semplicemente il valore del numero più grande potrà richiamare la funzione così:
codice:
short greater=check_max(10,26,NULL);
/* ora in greater c'è il più grande dei due numeri */
, mentre un chiamante interessato anche a sapere quale dei due è il più grande e se sono uguali, potrà fare
codice:
short compRes, greater;
greater=check_max(10,26,&compRes);
/* ora in greater c'è il più grande dei due numeri e
in compRes un valore che indica quale dei due è il maggiore o se sono uguali */
Ovviamente si possono immaginare molte altre soluzioni per restituire più valori, ma queste tre mi paiono le più pratiche in questa situazione.