Припустимо, що я хочу написати функцію, яка об'єднує два рядки в C. Так, як я б написав це:
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';
}
Однак K&R у своїй книзі реалізував це по-різному, зокрема, включивши якомога більше умовної частини циклу while:
void concat(char s[], char t[]){
int i, j;
i = j = 0;
while (s[i] != '\0') i++;
while ((s[i++]=t[j++]) != '\0');
}
Який спосіб є кращим? Чи рекомендується чи не рекомендується писати код так, як це роблять K&R? Я вважаю, що мою версію було б легше читати іншими людьми.
while (*s++ = *t++); (Мій C дуже іржавий, чи потрібні мені паролі там, де пріоритет оператора?) Чи K&R випустив нову версію своєї книги? Їх оригінальна книга мала надзвичайно стислий та ідіоматичний код.
'\0'з t( whileперший вихід). Це дозволить залишити отриманий sрядок без закінчення '\0'(якщо тільки місце пам'яті вже не було нульовим). Другий блок коду зробить копію закінчення '\0'до виходу з whileциклу.

