2010-08-21 41 views
13

gcc 4.4.4 c89typedef'ing的標準

我只是想知道在創建類型時是否應該遵循任何標準。

例如:

typedef struct date 
{ 
} date_t; 

我也看到人們把這樣的資本:

typedef struct date 
{ 
} Date; 

或者變量

typedef unsigned int Age; 

或本

typedef unsigned int age_t; 

是否有任何標準應該遵循。就我個人而言,我更喜歡用_t修飾。

非常感謝您的任何建議,

+2

我認爲更習慣的術語是'convention'而不是'standard'。好問題。我認爲openssl項目使用typedef struct objname_st {...} objname的約定。 – 2010-08-21 16:26:27

回答

5

其中大部分歸結爲個人偏好,關鍵是要保持一致(或者如果您有公司慣例,請使用它)。下面的文章有一定的命名指南:

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

注意,它切換 '_t' 部分:

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

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

有基於C的命名約定這裏較早討論:

What are the most common naming conventions in C?

+0

將節點作爲標記名稱,並將node_t作爲類型不是更好嗎?謝謝。 – ant2009 2010-08-21 19:08:38

+4

考慮到'_t'是爲POSIX保留的,我建議不要使用'_t',並提出一個對你有意義的命名約定(例如,請參閱@ casablanca的答案)。我只引用了這篇文章,這只是一個意見。 – 2010-08-21 19:32:56

4

風格是非常個人化的,高度主觀的東西,我強烈建議你只需要使用任何你喜歡,或任何約定在您的組織中使用。

+10

但是,公約會根據經驗發展。爲什麼不試圖利用這種經驗? – 2010-08-21 16:53:04

3

遵循其他人爲您的項目所做的事情,使所有內容保持一致。否則,他們在技術上都是可接受的。

27

如果您正在開發遵循POSIX標準的平臺,那麼您應該瞭解,任何以_t結尾的標識符都是爲POSIX定義的類型保留的,因此建議您不要對自己的類型遵循相同的約定。

3

我不認爲有任何「標準」的命名約定。實際上,它們在項目間(以及其他語言,如C++或Java)之間差異很大,我親自採用了所有語言中的camelCase。我總是通過typedef來定義我的結構,所以我只是使用任何我會給它的名字(這也是Win32 API的作用)。如果我需要一個自我參照的結構,我的前綴來_原料結構的名字:

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

當然,出於某種原因,C#和.NET約定似乎將大寫方法和字段名的第一個字母。 – 2010-08-21 16:54:46

+6

保留前導下劃線後跟大寫字母或其他下劃線的名稱。 (具有前導下劃線後跟一個小寫字母的名稱可能被保留,具體取決於範圍;更容易避免前導下劃線。)http://stackoverflow.com/questions/228783/what-are-the-rules-about-using -an-underscore-in-ac-identifier/228797#228797 – jamesdlin 2010-08-21 17:08:34

1

一般來說大多數語言允許非標準化的級別或類型使用SentenceCase的。我發現這是最好的做法,並且在允許它的語言中,另外使用名稱空間或模塊來防止衝突。在沒有(如C)的語言中,必要的前綴不會誤入歧途。使用多語言示例的東西,我目前工作:

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

你可能只是簡單地使用

typedef struct toto toto; 
  1. struct toto(標籤)和 typedeftoto(標識符) 在不同的C「namescopes」中,所以它們是兼容的,但它們最終指向相同的類型。
  2. 作爲額外的獎勵,這也是 與C++兼容,通常 含蓄地具有這樣的typedef
  3. 作爲另一個獎勵,這會抑制 聲明變量toto,它有時可能會令人困惑。
+0

我很高興我滾動下來,不得不直接思考這個問題。 – bzeaman 2014-10-15 13:35:00