Załóżmy, że chcę napisać funkcję, która łączy dwa ciągi znaków w C. Sposób, w jaki napisałbym to:
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';
}
Jednak K&R w swojej książce zaimplementował to inaczej, szczególnie włączając w to możliwie jak najwięcej części warunkowej pętli while:
void concat(char s[], char t[]){
int i, j;
i = j = 0;
while (s[i] != '\0') i++;
while ((s[i++]=t[j++]) != '\0');
}
Który sposób jest preferowany? Czy zachęca się lub zniechęca do pisania kodu tak, jak robi to K&R? Wierzę, że moja wersja byłaby łatwiejsza do odczytania przez innych ludzi.
while (*s++ = *t++);
(Moje C jest bardzo zardzewiałe, czy potrzebuję tam parens, aby operator miał pierwszeństwo?) Czy K&R wydało nową wersję swojej książki? Ich oryginalna książka miała wyjątkowo zwięzły i idiomatyczny kod.
'\0'
z t
(na while
wyjściach pierwszy). Spowoduje to pozostawienie powstałego s
ciągu bez zakończenia '\0'
(chyba że lokalizacja pamięci została już wyzerowana). Drugi blok kodu utworzy kopię zakończenia '\0'
przed wyjściem z while
pętli.