Đó là an toàn hơn vì bạn không phải đề cập đến tên loại hai lần và không phải xây dựng chính tả thích hợp cho phiên bản "không tham chiếu" của loại. Ví dụ, bạn không cần phải "đếm những vì sao" trong
int *****p = malloc(100 * sizeof *p);
so sánh với loại dựa trên sizeof
trong
int *****p = malloc(100 * sizeof(int ****));
nơi bạn đã quá chắc chắn rằng bạn sử dụng đúng số *
dưới sizeof
.
Để chuyển sang loại khác, bạn chỉ phải thay đổi một địa điểm (khai báo p
) thay vì hai. Và những người có thói quen đúc kết quả của malloc
phải thay đổi ba địa điểm.
Nói chung, điều này có ý nghĩa rất nhiều khi tuân thủ nguyên tắc sau: nhập tên thuộc về khai báo và không có nơi nào khác. Các câu lệnh thực tế phải độc lập với loại. Họ nên tránh đề cập đến bất kỳ tên loại hoặc sử dụng bất kỳ tính năng loại cụ thể khác càng nhiều càng tốt.
Phương tiện sau có nghĩa là: Tránh phôi không cần thiết. Tránh cú pháp không đổi loại cụ thể không cần thiết (như 0.0
hoặc 0L
trong đó một đồng bằng 0
sẽ đủ). Tránh đề cập đến tên loại dưới sizeof
. Và cứ thế.
FYI, khi được sử dụng với một biến, 'sizeof' không cần dấu ngoặc:' p = malloc (sizeof * p); ' –
Đó là chi tiết có thể đọc được với parens –
@TomerArazy: Tôi cầu xin sự khác biệt; nó là _less_ có thể đọc được với parens. Không có parens, nó _cannot_ là một typename; sự thiếu hụt parens giúp người đọc của họ phân biệt. (nhỏ vấn đề: cũng có, các parens có thể cho rằng sizeof là một chức năng, mà nó không phải là) – wildplasser