回覆列表
  • 1 # 使用者4175718765495

    typedef的好處就是告訴你這個型別是什麼東西。這不是笑話。比如,寫一個int型的變數,我們能從名字知道它大概的含義,但我們不能知道這個變數的屬性是什麼。有人會說,它是int型別啊,但int型別佔多少位元組,不是一個確定的值。int可能佔2位元組、4位元組、8位元組,假如這個變數用在網路資料包裡,我怎麼確定它的長度是一定的呢?解決的辦法是:

    然後程式碼裡一個int都不要用,都用int32_t,一旦換了平臺,那麼只改typedef,就可以搞定了。當然了,我還可以這樣定義:以後我再用reg32_t的時候,我就知道它是一個硬體暫存器變數的型別,寬度是32bit大小。有人會說宏也可以解決這樣的問題。下面是一個坑:看上去一樣嗎?好像一樣,但如果遇到下面的情況:用typedef等價於用宏等價於用宏的話,b就不是指標型別了。所以typedef的存在是解決一些宏定義的問題,讓程式碼更好看。對於網路、驅動等等關注變數型別位元組寬度的地方,typedef作用很重要。並且,不知道有多少人體驗過64位程式設計,64位C語言裡,我見過的有LP64,ILP64,LLP64,大概的意思是:為了應付各種奇葩的編譯器,最好的辦法是自己定義好型別,用自己的型別,當需要遷移到新平臺時,改幾個標頭檔案就可以了。這也是為什麼各個作業系統都熱衷於定義一套自己的型別,而不推薦直接使用C語言預設型別的原因(Windows裡有DWORD,Linux裡有u_int32_t)當然,如果不寫驅動,不寫網路,只寫簡單的應用,那麼可以不關注typedef的用法。另外,宏也好,typedef也好,都是為了提高程式碼可讀性,如果只是為了表現自己用了多少複雜的東西而特意用這些玩意,還是別用的好。

  • 中秋節和大豐收的關聯?
  • 鬍子刮不乾淨怎麼辦,老是有鬍渣?