作者zzss2003 (brotherD) 看板:
C_and_CPP標題[問題] 各位都怎麼命名struct的type與identifer?
時間Wed Feb 20 14:52:09 2019
範例:
typedef struct
{
unsigned long LTH; //header description
unsigned long VER; //header description
char Name[FUNCTION_NAME_LTH]; //header description
}Flash; //為什麼這些members的型別是Flash,而不是Header?
typedef struct
{
Flash Header; //型別為Flash的Header
unsigned long CRC32;
}Component;
Component* DSP = malloc(sizeof(Component));
DSP.Header.VER = 2 //DSP(元件型別)的標頭檔(Flash型別)的版本號(數字型別)為2
^^^^^^^^^^^^^^^^^^
非常符合邏輯
上述的命名方式有一個地方讓我覺得很奇怪,為什麼標頭檔的型別為Flash,而不是Header
?。
因為Flash不應該是一個型別阿...Header才是一個型別吧?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.163.216.18
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1550645531.A.D21.html
1F:→ Neisseria: 所以樓主想問什麼? 02/20 15:01
已補充><
※ 編輯: zzss2003 (118.163.216.18), 02/20/2019 15:08:58
2F:→ loveme00835: 「型別」定義內容以及行為等 「名稱」賦予意義,你 02/20 15:29
3F:→ loveme00835: 可以把不同的資料放在最前面來當作標頭,因此把 Head 02/20 15:29
4F:→ loveme00835: er 的型別換成 int 也是合理的,不過這個抽象化要做 02/20 15:29
5F:→ loveme00835: 足才會比較好抽換,不然只會得到超多編譯錯誤 02/20 15:29
love大大,聽您這樣解釋,您應該滿清楚我現在卡住的點在哪,但我不太能夠很明白地講出
來我的問題。
我會卡住的原因是因為,我搞不懂清楚type與identifer的定義與其差別嗎?
※ 編輯: zzss2003 (118.163.216.18), 02/20/2019 15:46:13
6F:→ suwako: 舉個例子:int a; 宣告一個名稱為a的變數,其型別為int 這 02/20 17:21
7F:→ suwako: 樣你有了解了嗎? 02/20 17:21
8F:→ MOONRAKER: 生一個小孩,取名叫小孩? 02/20 18:04
9F:推 chuegou: 如果有兩顆一樣的flash 你要怎麼定義型別和宣告變數 02/20 20:01
10F:→ chuegou: 這樣想就知道差異了 02/20 20:01
11F:推 Bencrie: 第一個範例叫把一個匿名 struct 定義為 Flash 的型別 02/20 21:11
12F:推 TWkobe: 出發點差異 他是以flash 當主體 02/20 21:52
13F:→ james732: 話說有時候我覺得命名比寫程式還困難… 02/21 00:26
真的...我也這樣覺得,而且我覺得我把Object跟Class的觀念與變數命名的觀念混在一起
了
※ 編輯: zzss2003 (118.163.216.18), 02/21/2019 10:14:35
14F:→ MOONRAKER: 應該是把programming當國文來唸。 02/21 11:31
15F:推 Neisseria: 變數要用 domain knowledge 來命名 02/21 11:37
我有試過把我的需求用中文寫下來,但是還是還辦法寫出來相對應的結構
需求:
記憶體(memory)有很多種類,快閃(flash)是其中的一種,而海思(hynix)是做快閃記憶體
的品牌
案子所使用的是海思的快閃記憶體,在記憶體裡面存放著好幾筆相同格式的元件,每個元
件都有其標頭檔(header)(FunNumber, Length, Version, Name)、資料、CRC碼
同一個元件如果Version不同,其資料也不一樣
我怎麼覺得如何命名跟語言程度有某種程度上的關聯性阿Orz
※ 編輯: zzss2003 (118.163.216.18), 02/21/2019 13:40:23
16F:推 pericles: 是不是少看了 typedef 才產生誤解? 02/22 21:20
17F:→ pericles: 因為 typedef 的關係,Flash 是該匿名 struct 的別名 02/22 21:25
18F:→ pericles: Header 為別名 Flash 型別的 struct object 02/22 21:27