我不是低級別非面向對象的編程語言的專家,我在寫一些C代碼在工作中的一個項目中間。我試圖創建一些體面的抽象數據類型來工作,Google搜索讓我意識到人們使用基於結構的ADT有兩種方式。有些人將數據類型定義爲結構:什麼時候應該鍵入結構與指向結構的指針?
typedef struct adt {
//content here
} adt;
並將其暴露給頭文件中的世界。
其他定義的數據類型作爲指針到結構:
// In .c file:
typedef struct adt_s {
//content here
} adt_s, *adt;
// In .h file:
typedef struct adt_s *adt;
據我所知,這種方法可以讓你的typedef一個struct沒有給外界的這個結構裏面有什麼是任何知識,讓程序員只能使用使用在同一個頭文件中提供的函數來操作這種數據類型。
是否有一個其他的原因比其他挑?當將ADT定義爲結構時,以及我們什麼時候將它們定義爲結構的指針時,是否有一個通用的「經驗法則」?
爲了提高可讀性,也許這是最好寫的'typedef結構S3_s * S3',而不是'typedef結構S3_s * S3',不是嗎? – Eregrith 2012-02-15 16:17:34
@Eregrith:如果你使用正式的語言語義,'typedef struct S3_s * S3'表示聲明符'* S3'的類型爲struct S3_s,存儲類爲'typedef',因此將星號標識符實際上是慣用的;然而,將星號與該類型放在一起更符合多少(大多數?)人對於聲明的想法;據我所知,只要你是一致的,兩個版本都沒問題... – Christoph 2012-02-15 16:31:53
我剛剛選擇了與OP的一致性,因爲我可以看到任何方式的好處。 – Useless 2012-02-15 16:36:21