PDA

View Full Version : [C]Cosa significano questi simboli?


rschirin
21-04-2010, 22:48
la funzione è molto semplice ma,essendo alle prime armi, alcuni simboli non li conosco e non ho idea di cosa facciano.

int MCD(int a, int b)
{ return (b ? MCD(b,a%b) : a);
}


1)cosa è quel ? subito dopo b???
2)a%b dovrebbe prendere il resto della divisione a/b giusto?
3): a cosa sono quei due punti?

grazie

Braga83
21-04-2010, 22:59
Dovrebbe essere l'operatore '?'. E' l'unico operatore ternario del linguaggio.

E' un vecchio costrutto che ormai non si usa piu'.

La semantica e':


int MCD(int a, int b)
{
if (b)
return MCD(b,a%b)
else ;
return a
}



Il % ritorna il resto della divisione intera

lupoxxx87
21-04-2010, 23:25
int MCD(int a, int b) {
return (b ? MCD(b,a%b) : a);
}


..davvero molto elegante....

rschirin
22-04-2010, 00:33
if (b)



sarebbe come scrivere if (b==0) giusto?

wingman87
22-04-2010, 06:36
sarebbe come scrivere if (b==0) giusto?

No, il contrario:
if(b!=0)

Questo perché in C il valore 0 viene considerato false (ha tutti i bit a zero) mentre ogni altro valore è considerato true (hanno almeno un bit a uno).
Comunque non credo che l'operatore ternario non si usi più, mi sembra un'affermazione un po' forte.

Braga83
22-04-2010, 07:21
Mai detto che non si usa piu'. Dico solo che era di moda 20 anni fa, adesso viene usato piu' raramente, almeno dal codice che vedo io.

lupoxxx87
22-04-2010, 09:44
Mai detto che non si usa piu'. Dico solo che era di moda 20 anni fa, adesso viene usato piu' raramente, almeno dal codice che vedo io.

perchè guardi codici di basso livello :D :D

il '?:' è uno dei dettagli che ti fanno capire quando hai a che fare con un programmatore a cui non importa se nessuno poi capirà il suo codice ma importa solo scriverlo in modo elegante e raffinato.
un po' come


valore_minimo = array[puntatore_a_lista->elemento = valore];


in cui condensi l'impossibile sfruttando le diverse priorità degli operatori


ndr: se dico che guardi codici di basso livello, lo dico scherzosamente, non te la prendere
ndr2: esprimo esplicitamente quanto qui sopra perchè a volte c'è gente che ha poco senso dell'umorismo ;)

Braga83
22-04-2010, 09:55
D'accordissimo con te....

fosse per me lo deprecherei dato che rende il codice ancora piu' criptico di quello che e'. Molto meglio il buon vecchio if...then.... else.