編寫POSIX可移植C程式的一些經驗總結(1)——整數型別

來源:互聯網
上載者:User

C語言定義了如下的整數型別(unsigned類型沒列出):char short intlonglong long但C語言沒有規定了他們之間的關係為:sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)現代UNIX系統不是32位就是64位(未來也許還有128位的),我總結的經驗值是:sizeof(char) == 1sizeof(short) == 2sizeof(int) == 4sizeof(long) == 4(32位)或8(64位)sizeof(long long) == 8在我用過的UNIX系統(GNU Linux、SUN Solaris、IBM AIX、HP-UX、MAC OSX)都是這樣,只要不是嵌入式開發,大部分都是上面的情況。當然,POSIX下面有更好的方法去定義一個固定長度的整型,在stdint.h裡面就有,大概可以分成這幾類:固定長度整型:int8_t / uint8_tint16_t / uint16_tint32_t / uint32_tint64_t / uint64_t類型中的數字就是該類型的位元,首碼u代表unsigned

規定了最小長度的整型:int_lease8_t / uint_least8_tint_lease16_t / uint_least16_tint_lease32_t / uint_least32_tint_lease64_t / uint_least64_tint_fast8_t / uint_fast8_tint_fast16_t / uint_fast16_tint_fast32_t / uint_fast32_tint_fast64_t / uint_fast32_tlease類整型保證 sizeof(int_lease[X]_t)*8 >= [X],其作用是,例如在一些硬體上可能硬體不支援直接儲存16位整型,只支援32位整型,如果用int16_t,就需要編譯器產生特殊的代碼去類比,這時候用lease類型可以減少不必要的代碼產生。fast類整型和lease類似,但它們是為了最佳化速度,一般來說,CPU處理和其字長(word)長度相同的整型會比較快(理論上),如果word是32位, 則int_fast8_t和int_fast16_t就定義為int_fast32_t。如果不考慮把程式移植到特殊的硬體上,lease和fast類整型一般不需要用到。

和指標長度相同的整型:intptr_t / uintptr_t喜歡把指標轉成int的人要注意了,如果希望寫出可移植的C代碼,一定不能有指標到int或int到指標的轉換,在32位還湊巧,在64位系統下就死翹翹了。上面兩個類型車長度保證和指標一樣,無論那個方向的轉換都很安全。(按照經驗值,用long也可以)

最大長度的整型:intmax_t / uintmax_t這兩個類型表示系統能處理的最大長度的整型,一般是64位,暫時還沒遇到過128位的系統。

unicode相互關聯類型:

wchar_t / wint_t

 

因為unicode標準有很多個版本,早期版本裡面的字元集用uint16_t就可以表示。後來隨著加入的字元數量越來越多,要用uint32_t才能表示。

wint_t則用來表示所有unicode字元和其擴充字元集的字元,具體可以看一下utf16的編碼方法。(我估計是這樣:某些系統的wchar_t裡面是utf16編碼,wint_t是utf32編碼)

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.