Mari kita asumsikan saya ingin menulis fungsi yang menggabungkan dua string dalam C. Cara saya akan menulisnya adalah:
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';
}
Namun, K&R dalam buku mereka menerapkannya secara berbeda, terutama termasuk sebanyak mungkin dalam bagian loop sementara:
void concat(char s[], char t[]){
int i, j;
i = j = 0;
while (s[i] != '\0') i++;
while ((s[i++]=t[j++]) != '\0');
}
Cara mana yang lebih disukai? Apakah didorong atau tidak disarankan untuk menulis kode seperti yang dilakukan K&R? Saya percaya versi saya akan lebih mudah dibaca oleh orang lain.
while (*s++ = *t++);
(C saya sangat berkarat, apakah saya perlu parens di sana untuk diutamakan operator?) Apakah K&R merilis versi baru dari buku mereka? Buku asli mereka memiliki kode yang sangat ringkas dan idiomatik.
'\0'
dari t
( while
keluar pertama). Ini akan meninggalkan s
string yang dihasilkan tanpa berakhir '\0'
(kecuali lokasi memori sudah memusatkan perhatian). Blok kode kedua akan membuat salinan terminating '\0'
sebelum keluar dari while
loop.