本節書摘來自華章計算機《編寫高品質代碼:改善c程式代碼的125個建議》一書中的第1章,建議2-4,作者:馬 偉 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。
我們知道,size_t類型代表的是一種無符号整數類型,現在有這樣一個問題:既然size_t類型是一種無符号整數類型,那麼它是否可以直接與它所代表的真實實際類型混合使用呢?帶着這個問題,我們來看下面這段代碼:
在上面的代碼中,變量x被聲明為unsigned int類型(即無符号整數類型),變量y雖然被聲明為size_t類型,但它同樣是一種無符号整數類型。是以,從表面上看,語句“x = y”完全是可行的,但實際情況并非如此。
上面已經闡述過,size_t類型在不同的平台上很可能代表的是unsigned int、unsigned long int或者unsigned long long int類型。當代表unsigned int類型時,執行語句“x = y”不會出現什麼問題;但如果代表的是unsigned long int或unsigned long long int類型,那麼執行語句“x = y”時,就可能把y的高位給截掉,進而導緻結果出錯。是以,我們千萬不能在程式中混用size_t類型和它所代表的真實類型,這一點一定要注意。