Các _t
thường kết thúc một định nghĩa loại mờ.
GCC chỉ thêm các tên kết thúc _t
vào không gian tên dành riêng mà bạn không thể sử dụng, để tránh xung đột với các phiên bản tương lai của Standard C và POSIX (hướng dẫn thư viện GNU C) . Sau một số nghiên cứu, cuối cùng tôi đã tìm thấy tài liệu tham khảo chính xác bên trong Tiêu chuẩn POSIX (1003.1, Cơ sở lý luận (Thông tin)):
B.2.12 Kiểu dữ liệu
Yêu cầu rằng các loại bổ sung được xác định trong phần này kết thúc bằng '' _t '' đã được nhắc nhở bởi vấn đề ô nhiễm không gian tên. Thật khó để xác định một loại (trong đó loại đó không phải là một loại được xác định bởi IEEE Std 1003.1-2001) trong một tệp tiêu đề và sử dụng nó trong một loại khác mà không thêm các ký hiệu vào không gian tên của chương trình. Để cho phép người triển khai cung cấp các loại riêng của họ, tất cả các ứng dụng phù hợp được yêu cầu để tránh các ký hiệu kết thúc bằng '' _t '', cho phép người triển khai cung cấp các loại bổ sung. Bởi vì việc sử dụng chính các loại là trong định nghĩa của các thành viên cấu trúc, có thể (và trong nhiều trường hợp phải) được thêm vào các cấu trúc được định nghĩa trong IEEE Std 1003.1-2001, nên nhu cầu về các loại bổ sung là hấp dẫn.
Tóm lại, Tiêu chuẩn nói rằng có nhiều cơ hội mở rộng danh sách các loại Tiêu chuẩn, do đó, Tiêu chuẩn hạn chế _t
không gian tên để sử dụng riêng.
Chẳng hạn, chương trình của bạn phù hợp với POSIX 1003.1 Vấn đề 6 và bạn đã xác định một loại foo_t
. POSIX 1003.1 Các vấn đề 7 cuối cùng được phát hành với một loại mới được xác định foo_t
. Chương trình của bạn không phù hợp với phiên bản mới, đây có thể là một vấn đề. Hạn chế _t
sử dụng ngăn chặn tái cấu trúc mã. Do đó, nếu bạn nhắm đến sự tuân thủ POSIX, bạn chắc chắn nên tránh _t
như Tiêu chuẩn quy định.
Lưu ý bên lề: cá nhân, tôi cố gắng gắn bó với POSIX vì tôi nghĩ rằng nó mang lại những điều cơ bản tốt cho lập trình sạch. Hơn nữa, tôi khá thích các hướng dẫn về Phong cách mã hóa Linux (chương 5) . Có một số lý do tốt tại sao không sử dụng typedef. Hy vọng điều này giúp đỡ!
int_t
xác định? Nếu nó luôn được định nghĩa làint
, nó không hữu ích; Nó rõ ràng hơn nhiều để sử dụngint
trực tiếp. Nếu nó không phải luôn luôn được định nghĩa làint
(giả sử, nếu nó có thểlong int
hoặcshort int
), thì đó là một cái tên được lựa chọn kém và khó hiểu.