Diyelim ki C'deki iki dizgiyi birleştiren bir işlev yazmak istiyorum. Yazacağım şekilde:
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';
}
Bununla birlikte, K & R kitaplarında özellikle farklı süre döngüsünün koşulu dahil olmak üzere kitapta farklı şekilde uygulanmıştır:
void concat(char s[], char t[]){
int i, j;
i = j = 0;
while (s[i] != '\0') i++;
while ((s[i++]=t[j++]) != '\0');
}
Hangi yol tercih edilir? K & R'nin yaptığı gibi kod yazması teşvik edilir mi yoksa önerilmez mi? Sürümümün diğer insanlar tarafından okunmasının daha kolay olacağını düşünüyorum.
while (*s++ = *t++);
(Şokum çok paslı, operatör önceliği için orada ebeveynlere ihtiyacım var mı?) K & R kitaplarının yeni bir versiyonunu yayınladı mı? Orijinal kitaplarının çok özlü ve deyimsel kodu vardı.
'\0'
dan t
( while
ilk çıkışlarında). Bu, sonuçlanan s
dizgiyi sonlandırmadan bırakır '\0'
(bellek konumu zaten sıfırlanmadıysa). İkinci kod bloğu '\0'
, while
döngüden çıkmadan önce sonlandırmanın kopyasını alacaktır .