Vamos supor que eu queira escrever uma função que concatene duas seqüências de caracteres em C. A maneira como eu a escreveria é:
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';
}
No entanto, a K&R em seu livro a implementou de maneira diferente, particularmente incluindo o máximo possível na parte de condição do loop while:
void concat(char s[], char t[]){
int i, j;
i = j = 0;
while (s[i] != '\0') i++;
while ((s[i++]=t[j++]) != '\0');
}
Qual o caminho preferido? É encorajado ou desencorajado a escrever código da maneira que a K&R faz? Acredito que minha versão seria mais fácil de ser lida por outras pessoas.
while (*s++ = *t++);
(meu C está muito enferrujado, preciso de parênteses para precedência do operador?) A K&R lançou uma nova versão do livro? O livro original deles tinha um código extremamente conciso e idiomático.
'\0'
de t
(as while
saídas primeiro). Isso deixará a s
sequência resultante sem uma finalização '\0'
(a menos que o local da memória já esteja zerado). O segundo bloco de código fará a cópia da terminação '\0'
antes de sair do while
loop.