Giả sử tôi muốn viết một hàm nối hai chuỗi trong C. Cách tôi sẽ viết là:
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';
}
Tuy nhiên, K & R trong cuốn sách của họ đã triển khai nó theo cách khác, đặc biệt bao gồm càng nhiều trong phần điều kiện của vòng lặp while càng tốt:
void concat(char s[], char t[]){
int i, j;
i = j = 0;
while (s[i] != '\0') i++;
while ((s[i++]=t[j++]) != '\0');
}
Cách nào được ưa thích? Được khuyến khích hay không khuyến khích viết mã theo cách K & R làm? Tôi tin rằng phiên bản của tôi sẽ dễ đọc hơn bởi những người khác.
while (*s++ = *t++);
(My C rất gỉ, tôi có cần parens ở đó để ưu tiên cho nhà điều hành không?) K & R có phát hành phiên bản mới của cuốn sách của họ không? Cuốn sách gốc của họ có mã cực kỳ súc tích và thành ngữ.
'\0'
từ t
( while
thoát ra trước). Điều này sẽ để lại s
chuỗi kết quả mà không kết thúc '\0'
(trừ khi vị trí bộ nhớ đã bị xóa). Khối mã thứ hai sẽ tạo bản sao kết thúc '\0'
trước khi thoát khỏi while
vòng lặp.