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: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
.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ì:
, mentre un chiamante interessato anche a sapere quale dei due è il più grande e se sono uguali, potrà farecodice:short greater=check_max(10,26,NULL); /* ora in greater c'è il più grande dei due numeri */
Ovviamente si possono immaginare molte altre soluzioni per restituire più valori, ma queste tre mi paiono le più pratiche in questa situazione.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 */

Rispondi quotando