[問題] 各位都怎麼命名struct的type與identifer?

看板C_and_CPP (C/C++)作者時間7年前 (2019/02/20 14:52), 7年前編輯推噓5(5013)
留言18則, 9人參與, 7年前最新討論串1/1
範例: 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://www.ptt.cc/bbs/C_and_CPP/M.1550645531.A.D21.html

02/20 15:01, 7年前 , 1F
所以樓主想問什麼?
02/20 15:01, 1F
已補充>< ※ 編輯: zzss2003 (118.163.216.18), 02/20/2019 15:08:58

02/20 15:29, 7年前 , 2F
「型別」定義內容以及行為等 「名稱」賦予意義,你
02/20 15:29, 2F

02/20 15:29, 7年前 , 3F
可以把不同的資料放在最前面來當作標頭,因此把 Head
02/20 15:29, 3F

02/20 15:29, 7年前 , 4F
er 的型別換成 int 也是合理的,不過這個抽象化要做
02/20 15:29, 4F

02/20 15:29, 7年前 , 5F
足才會比較好抽換,不然只會得到超多編譯錯誤
02/20 15:29, 5F
love大大,聽您這樣解釋,您應該滿清楚我現在卡住的點在哪,但我不太能夠很明白地講出 來我的問題。 我會卡住的原因是因為,我搞不懂清楚type與identifer的定義與其差別嗎? ※ 編輯: zzss2003 (118.163.216.18), 02/20/2019 15:46:13

02/20 17:21, 7年前 , 6F
舉個例子:int a; 宣告一個名稱為a的變數,其型別為int 這
02/20 17:21, 6F

02/20 17:21, 7年前 , 7F
樣你有了解了嗎?
02/20 17:21, 7F

02/20 18:04, 7年前 , 8F
生一個小孩,取名叫小孩?
02/20 18:04, 8F

02/20 20:01, 7年前 , 9F
如果有兩顆一樣的flash 你要怎麼定義型別和宣告變數
02/20 20:01, 9F

02/20 20:01, 7年前 , 10F
這樣想就知道差異了
02/20 20:01, 10F

02/20 21:11, 7年前 , 11F
第一個範例叫把一個匿名 struct 定義為 Flash 的型別
02/20 21:11, 11F

02/20 21:52, 7年前 , 12F
出發點差異 他是以flash 當主體
02/20 21:52, 12F

02/21 00:26, 7年前 , 13F
話說有時候我覺得命名比寫程式還困難…
02/21 00:26, 13F
真的...我也這樣覺得,而且我覺得我把Object跟Class的觀念與變數命名的觀念混在一起 了 ※ 編輯: zzss2003 (118.163.216.18), 02/21/2019 10:14:35

02/21 11:31, 7年前 , 14F
應該是把programming當國文來唸。
02/21 11:31, 14F

02/21 11:37, 7年前 , 15F
變數要用 domain knowledge 來命名
02/21 11:37, 15F
我有試過把我的需求用中文寫下來,但是還是還辦法寫出來相對應的結構 需求: 記憶體(memory)有很多種類,快閃(flash)是其中的一種,而海思(hynix)是做快閃記憶體 的品牌 案子所使用的是海思的快閃記憶體,在記憶體裡面存放著好幾筆相同格式的元件,每個元 件都有其標頭檔(header)(FunNumber, Length, Version, Name)、資料、CRC碼 同一個元件如果Version不同,其資料也不一樣 我怎麼覺得如何命名跟語言程度有某種程度上的關聯性阿Orz ※ 編輯: zzss2003 (118.163.216.18), 02/21/2019 13:40:23

02/22 21:20, 7年前 , 16F
是不是少看了 typedef 才產生誤解?
02/22 21:20, 16F

02/22 21:25, 7年前 , 17F
因為 typedef 的關係,Flash 是該匿名 struct 的別名
02/22 21:25, 17F

02/22 21:27, 7年前 , 18F
Header 為別名 Flash 型別的 struct object
02/22 21:27, 18F
文章代碼(AID): #1SRFaRqX (C_and_CPP)
文章代碼(AID): #1SRFaRqX (C_and_CPP)