2010-08-21 69 views
13

gcc 4.4.4 c89Tiêu chuẩn cho typedef'ing

Tôi chỉ tự hỏi là có bất kỳ tiêu chuẩn nào nên được theo sau khi tạo các loại.

ví dụ:

người
typedef struct date 
{ 
} date_t; 

Tôi cũng đã thấy đặt một vốn như thế này:

typedef struct date 
{ 
} Date; 

Hoặc cho các biến

typedef unsigned int Age; 

hay này

typedef unsigned int age_t; 

Có bất kỳ tiêu chuẩn nào cần được tuân theo. Cá nhân tôi thích sửa chữa bài với một _t.

Rất cám ơn cho bất cứ đề nghị,

+2

Tôi nghĩ thuật ngữ thông dụng hơn là 'quy ước' thay vì 'chuẩn'. Câu hỏi hay. Tôi nghĩ rằng dự án openssl cho một sử dụng quy ước của typedef struct objname_st {...} objname. –

Trả lời

5

Phần lớn tùy thuộc vào sở thích cá nhân, với khóa là nhất quán (hoặc nếu bạn có quy ước công ty, hãy sử dụng điều đó). Bài viết sau đây có một số hướng dẫn cách đặt tên:

http://www.montefiore.ulg.ac.be/~piater/Cours/Coding-Style/

Lưu ý rằng nó chuyển mạch '_T' phần:

typedef struct node_t { 
    void *content; 
    struct node_t *next; 
} Node; 

typedef enum season_t { SPRING, SUMMER, FALL, WINTER } Season; 

Có một cuộc thảo luận trước đây về C đặt tên công ước ở đây:

What are the most common naming conventions in C?

+0

Sẽ không tốt hơn nếu bạn có Node làm tên thẻ và node_t là loại? Cảm ơn. – ant2009

+4

Vì '_t' được dành riêng cho POSIX, tôi khuyên bạn không nên sử dụng '_t' và đưa ra một quy ước đặt tên phù hợp với bạn (ví dụ, xem câu trả lời của @ casablanca). Tôi chỉ trích dẫn từ bài viết, đó chỉ là một ý kiến. –

4

Style là một điều rất cá nhân và rất chủ quan, tôi mạnh mẽ yêu cầu bạn chỉ cần sử dụng bất cứ điều gì bạn thích, hoặc bất cứ công ước được sử dụng trong tổ chức của bạn.

+10

Nhưng, các công ước phát triển dựa trên kinh nghiệm. Tại sao không cố gắng tận dụng trải nghiệm đó? –

3

Làm theo những gì người khác làm cho dự án của bạn để mọi thứ vẫn nhất quán. Nếu không, cả hai đều có thể chấp nhận được về mặt kỹ thuật.

27

Nếu bạn đang làm việc trên nền tảng tuân thủ các tiêu chuẩn POSIX, bạn nên lưu ý rằng bất kỳ số nhận dạng nào kết thúc bằng _t đều được dành riêng cho các loại được xác định POSIX do đó không nên tuân thủ cùng một quy ước cho riêng bạn.

3

Tôi không nghĩ có bất kỳ quy ước đặt tên "chuẩn" nào. Trong thực tế, chúng thay đổi rất nhiều giữa các dự án (và giữa các ngôn ngữ khác như C++ hoặc Java) mà cá nhân tôi đã sử dụng camelCase trong tất cả các ngôn ngữ.

Tôi luôn xác định cấu trúc của mình thông qua typedef, vì vậy tôi chỉ sử dụng bất kỳ tên nào tôi có thể cung cấp cho nó nếu không (đây cũng là những gì mà API Win32 thực hiện). Trong trường hợp tôi cần một cấu trúc tự tham khảo, tôi tiền tố một _ tên struct liệu của:

typedef struct _Node { 
    _Node *next; 
} Node; 
+0

Tất nhiên vì lý do nào đó, quy ước C# và .NET dường như được viết hoa chữ cái đầu tiên của tên phương thức và tên trường. –

+6

Tên có dấu gạch dưới hàng đầu theo sau là chữ cái viết hoa hoặc dấu gạch dưới khác được đặt trước. (Các tên có dấu gạch dưới hàng đầu sau một chữ thường có thể được đặt trước tùy thuộc vào phạm vi; dễ dàng hơn để tránh các dấu gạch dưới hàng đầu.) Http://stackoverflow.com/questions/228783/what-are-the-rules-about-using -an-underscore-in-ac-identifier/228797 # 228797 – jamesdlin

1

Nói chung hầu hết các ngôn ngữ cho phép việc sử dụng các SentenceCase cho các lớp phi tiêu chuẩn hoặc các loại. Tôi thấy đây là phương pháp hay nhất và bằng các ngôn ngữ cho phép, hãy sử dụng thêm không gian tên hoặc mô-đun để ngăn chặn xung đột. Trong các ngôn ngữ không (chẳng hạn như C), một tiền tố cần thiết không bao giờ bị lạc lối.Để sử dụng một ví dụ đa ngôn ngữ cho một cái gì đó tôi đang làm việc trên:

C: typedef uint32_t CpfsMode; 
C++: namespace Cpfs { typedef uint32_t Mode; } 
Python: cpfs.Mode = int 
7

Bạn có thể chỉ đơn giản là sử dụng

typedef struct toto toto; 
  1. Các struct toto (tag) và typedef tên toto (định danh) nằm trong các chữ "C" khác nhau để chúng tương thích, nhưng chúng trỏ đến cùng một loại ở cuối.
  2. Là một phần thưởng thêm, đây cũng là tương thích với C++, thường là hoàn toàn có một số typedef.
  3. Là một phần thưởng khác, điều này ngăn cản tuyên bố biến số toto có thể đôi khi khá khó hiểu.
+0

Tôi rất vui vì tôi đã cuộn xuống và phải đối mặt với lòng bàn tay bản thân mình vì không trực tiếp suy nghĩ về điều này. – bzeaman

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