Linguaggio C: Return
Ciao ragazzi ,
la mia funzione è la seguente
Il problema evidente è come posso fare a gestire l'overflow del return?Quindi, terminato il programma, se lanciamo da shell il comando per farci stampare l’ultimo return code:
echo$?
la mia funzione è la seguente
void somma(int a , int b){ int som=0; int som=a+b; return som; }
Il problema evidente è come posso fare a gestire l'overflow del return?Quindi, terminato il programma, se lanciamo da shell il comando per farci stampare l’ultimo return code:
echo$?
Risposte
La funzione è di tipo void, ciò implica la non restituzione di nessun valore alla funzione chiamante.
Un return, nell'attuale stato delle cose, è semplicemente insensato, quindi.
Per rendere il tuo codice funzionante sostituisci il tipo del valore di ritorno void nella definizione della funzione con quello corretto, ovvero int, in quanto la funzione "vorrebbe" restituire alla funzione chiamante il contenuto della variabile som, la quale è di tipo intero.
P.S: C'è un altro errore, hai dichiarato la variabile som due volte. Ti basta semplicemente eliminare la prima all'interno del corpo della funzione. Oppure, ancora meglio probabilmente, togliere quell'int alla seconda tra le righe all'interno del corpo della funzione.
Spero di non aver scritto sciocchezze e d'esserti stato d'aiuto.
Un return, nell'attuale stato delle cose, è semplicemente insensato, quindi.
Per rendere il tuo codice funzionante sostituisci il tipo del valore di ritorno void nella definizione della funzione con quello corretto, ovvero int, in quanto la funzione "vorrebbe" restituire alla funzione chiamante il contenuto della variabile som, la quale è di tipo intero.
P.S: C'è un altro errore, hai dichiarato la variabile som due volte. Ti basta semplicemente eliminare la prima all'interno del corpo della funzione. Oppure, ancora meglio probabilmente, togliere quell'int alla seconda tra le righe all'interno del corpo della funzione.
Spero di non aver scritto sciocchezze e d'esserti stato d'aiuto.

Grazie per avermi risposto!!
Oltre questo volevo chiederti come posso risolvere il problema dell' overflow dato che il return deve essere di massimo 255
Oltre questo volevo chiederti come posso risolvere il problema dell' overflow dato che il return deve essere di massimo 255
255 cosa? Non capisco la tua domanda... Non stai usando un char. I char vengono immagazzinati su massimo 1byte, 8 bit, e quindi possono al massimo rappresentare i numeri nell'intervallo tra 0 e 255.
Per gli interi si parla 32 bit, di solito. Quindi puoi utilizzare numeri da [-65536,65535], per un int normale, rappresentato in complemento a due, o addirittura da [0,4294967295] se è un unsigned int, quindi un numero rappresentato in binario nudo e crudo.
Ciò che a te, nel concreto, serve sapere è che puoi gestire una somma che non superi 65535, o nel caso di numeri negativi -65536, e lo stesso dicasi per i 2 addendi. Questo ovviamente è riferito al codice attuale. Con delle modifiche potresti far sì che il range di rappresentazione vari, anche considerevolmente.
Come sopra, essendo anch'io uno studente, spero di non aver preso cantonata. Ringrazio chiunque volesse farmi notare errori di qualsiasi tipo nei miei post.
Per gli interi si parla 32 bit, di solito. Quindi puoi utilizzare numeri da [-65536,65535], per un int normale, rappresentato in complemento a due, o addirittura da [0,4294967295] se è un unsigned int, quindi un numero rappresentato in binario nudo e crudo.
Ciò che a te, nel concreto, serve sapere è che puoi gestire una somma che non superi 65535, o nel caso di numeri negativi -65536, e lo stesso dicasi per i 2 addendi. Questo ovviamente è riferito al codice attuale. Con delle modifiche potresti far sì che il range di rappresentazione vari, anche considerevolmente.
Come sopra, essendo anch'io uno studente, spero di non aver preso cantonata. Ringrazio chiunque volesse farmi notare errori di qualsiasi tipo nei miei post.
Capito
.
Un ultima cosa.. Come posso far passare il return di somma al main .
Mi scuso per l'ignoranza sul campo .

Un ultima cosa.. Come posso far passare il return di somma al main .
Mi scuso per l'ignoranza sul campo .
Immagazzinando il tutto in una variabile, ad esempio:
Con questa istruzione la variabile var conterrà il valore di som della funzione somma.
Sicuramente il tuo manuale di C fornirà molti esempi a riguardo, ti consiglio di dar loro un'occhiata.
var=somma(a,b);
Con questa istruzione la variabile var conterrà il valore di som della funzione somma.
Sicuramente il tuo manuale di C fornirà molti esempi a riguardo, ti consiglio di dar loro un'occhiata.
Grazie mille sei stato gentilissimo!
Prima di scrivere la chiamata a funzione come ti ha detto giustamente Sherlock assicurati di aver cambiato void in int.