Có đúng vậy. Nhưng đó là phong cách xấu xa. Không phải khai báo trực tiếp cấu trúc, mà là khai báo trực tiếp của một kiểu con trỏ. Đó là obfuscation, các thông tin mà một biến hoặc tham số nhất định là một con trỏ (và đến một mức độ thấp hơn cho mảng) là cực kỳ quan trọng khi bạn muốn đọc mã.
Khi xem lại mã, thường rất khó để nhìn thấy ở cái nhìn đầu tiên chức năng nào có thể có tác dụng phụ hay không. Nếu các loại được sử dụng ẩn thông tin này, nó sẽ thêm một gánh nặng ghi nhớ cho người đọc.
int do_fancy(vector a, vector b);
hoặc
int do_fancy(vector *a, vector *b);
trong trường hợp đầu tiên tôi có thể bỏ lỡ một cách dễ dàng mà chức năng đó có thể thay đổi nội dung của một hoặc b. Trong lần thứ hai tôi được cảnh báo.
Và khi thực sự viết mã tôi cũng biết trực tiếp để viết a->x
và không có trình biên dịch cho tôi biết error: request for member
x 'trong một cái gì đó không phải là một cấu trúc hoặc union`.
Tôi biết, nó trông giống như một sở thích cá nhân, nhưng đã làm việc với rất nhiều mã bên ngoài, tôi có thể đảm bảo với bạn rằng nó cực kỳ khó chịu khi bạn không nhận ra mức độ biến đổi của các biến. Đó là một lý do tôi cũng không thích tài liệu tham khảo C++ (trong Java nó không phải vì tất cả các đối tượng được truyền theo tham chiếu, nó nhất quán) và loại LPCSTR
của Microsoft.
Nguồn
2012-01-13 16:20:08
Cảm ơn rất nhiều ý nghĩa hoàn hảo. –
... và có thể 'const * S1CPTR'. – alecov
Chỉ để xác nhận tôi hiểu. Điều đó tương đương với 'typedef struct {...} S1; typedef S1 * S1PTR; '? – DCShannon