在學習sizeof運算符的時候,它的值類型為size_t,結果在使用printf函數顯示的時候,憑空多了很多警告,有點不不理解,為啥搞這么復雜?直接用個int類型多省事?
經過一番搜索和閱讀文檔,找到了答案,總結如下:
問題1:為啥不用int而是size_t這么古怪的類型,搞出好多類型不匹配的警告?
答:一個共識是:int類型一般小於等於數據線的寬度,而size_t類型一般為大於等於地址線寬度。而地址線寬度常常是大於數據線寬度的。
在數據只有8位的年代,地址率先進入10位,12位,在數據16位的年代,地址也已經進入了20位,24位。目前的int普遍是32位,而地址線寬度在主流平台中都是64位。
size_t為什么存在?因為無論int還是unsigned都很可能小於地址線寬度需要的大小,所以必須有個size_t。
問題2:為什么size_t后面要什么有個_t?
答:_t的意思就是type。關於為什么要加_t。一個類型后面加了_t說明了這是一個POSIX或GNU保留類型,防止命名空間污染(namespace pollution)。
不然標准庫里新加了什么類型說不定就和用戶已經定義的類型重名了。所以POSIX規定自己擴展的類型都加_t,這樣只要用戶定義類型的時候不加_t就不會沖突。