Supponiamo di voler scrivere una funzione che concatena due stringhe in C. Il modo in cui la scriverei è:
void concat(char s[], char t[]){
int i = 0;
int j = 0;
while (s[i] != '\0'){
i++;
}
while (t[j] != '\0'){
s[i] = t[j];
i++;
j++;
}
s[i] = '\0';
}
Tuttavia, K&R nel loro libro lo ha implementato in modo diverso, in particolare includendo quanto più possibile nella parte condizione del ciclo while:
void concat(char s[], char t[]){
int i, j;
i = j = 0;
while (s[i] != '\0') i++;
while ((s[i++]=t[j++]) != '\0');
}
Quale modo è preferito? È incoraggiato o scoraggiato scrivere codice come fa K&R? Credo che la mia versione sarebbe più facile da leggere da altre persone.
while (*s++ = *t++);
(La mia C è molto arrugginita, ho bisogno di parentesi lì per la precedenza dell'operatore?) K&R ha rilasciato una nuova versione del suo libro? Il loro libro originale aveva un codice estremamente conciso e idiomatico.
'\0'
da t
( while
prima esce). Ciò lascerà la s
stringa risultante senza terminazione '\0'
(a meno che la posizione della memoria non sia già stata azzerata). Il secondo blocco di codice eseguirà la copia della terminazione '\0'
prima di uscire dal while
ciclo.