Supongamos que quiero escribir una función que concatene dos cadenas en C. La forma en que lo escribiría es:
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';
}
Sin embargo, K&R en su libro lo implementó de manera diferente, particularmente incluyendo tanto en la parte de condición del ciclo while como sea posible:
void concat(char s[], char t[]){
int i, j;
i = j = 0;
while (s[i] != '\0') i++;
while ((s[i++]=t[j++]) != '\0');
}
¿Qué camino se prefiere? ¿Se recomienda o desaconseja escribir código como lo hace K&R? Creo que mi versión sería más fácil de leer por otras personas.
while (*s++ = *t++);
(Mi C está muy oxidada, ¿necesito padres allí para la precedencia del operador?) ¿K&R lanzó una nueva versión de su libro? Su libro original tenía un código extremadamente conciso e idiomático.
'\0'
de t
(las while
salidas primero). Esto dejará la s
cadena resultante sin terminar '\0'
(a menos que la ubicación de la memoria ya esté puesta a cero). El segundo bloque de código hará la copia de la terminación '\0'
antes de salir del while
bucle.