Припустимо, що я хочу написати функцію, яка об'єднує два рядки в 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
циклу.