Давайте предположим, что я хочу написать функцию, которая объединяет две строки в 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
цикла.