2009-07-27 33 views
7

Tôi đang làm việc trên một thư viện mà sử dụng rộng rãi các cấu trúc nhưđặt tên chương trình cho typedefs

typedef struct foo_bar_s { 
    ... 
} foo_bar_t; 

Đó là một ý tưởng tồi để sử dụng hậu tố _T, bởi vì đó là một POSIX reserved namespace. Hậu tố _s cho cấu trúc cũng khá vô dụng. Vì vậy, tôi nghĩ rằng tôi có thể thay đổi tất cả để

typedef struct foo_bar { 
    ... 
} foo_bar; 

hoặc nếu tên struct là không cần thiết

typedef struct { 
    ... 
} foo_bar; 

Tuy nhiên, tôi không thể phân biệt typedefs từ những biểu tượng thường xuyên (biến, vv) nữa. Đây thực sự là một vấn đề lớn và tôi có nên sử dụng một lược đồ đặt tên phù hợp khác cho typedef không? Hay nó không quan trọng đến thế?

Tôi thực sự không chắc chắn lắm. Bạn nghĩ sao? Ngoài ra, bạn có đề xuất gì cho các lược đồ đặt tên typedef?

Trả lời

8

Mặc dù, "_t" được đặt trước, rất ít khả năng bạn sẽ gặp phải sự cố. Tuy nhiên, quy ước này là phần còn lại của phiên bản cũ của C, trong đó cú pháp này được yêu cầu để đặt tên cho cấu trúc và vì vậy ngày nay bạn có thể chỉ cần viết một cái gì đó như sau (bỏ qua typedef và tên typedef):

 
struct name_of_struct 
{ 
    type1 member1; 
    type2 member2; 
    // ... 
    typeN memberN; 
}; 

Và có, bạn có thể sử dụng các nhận xét dòng đơn ("// ...") theo tiêu chuẩn hiện tại của C.

+6

_t thực sự được đặt trước bởi POSIX –

+0

Bây giờ hai người đã nói điều đó. Tôi kiểm tra lại, và hóa ra bạn đã đúng. Tôi sẽ sửa lỗi đó. –

+4

_t không được POSIX bảo lưu theo nghĩa là không ai khác được phép sử dụng các tên như vậy. Thay vào đó, việc triển khai POSIX chỉ có thể sử dụng các loại tên của biểu mẫu này. – starblue

5

Tôi sử dụng quy ước đặt tên được sử dụng trong tên của Dave Hanson C Interfaces and Implementations: một chữ T. Ví dụ, loại chuỗi là Seq_T và loại bảng băm là Table_T. Trong quá trình triển khai mô-đun, Hanson sử dụng #define để viết tắt chỉ   T. Điều này về cơ bản là các quy ước Modula-3 áp dụng cho lập trình C, nhưng tôi thấy rằng sau một cú sốc ban đầu ngắn, nó hoạt động tốt.

Các vấn đề liên quan