乙個有關sizeof的bug

2021-08-03 08:46:08 字數 763 閱讀 3527

sizeof常常用來計算位元組大小,但是對於sizeof你了解多少呢?下面我就遇到的乙個需要注意的地方做乙個記錄。

首先,sizeof作用是計算變數的大小,但它不是函式,是關鍵字,這個容易出錯。

然後,看下面**

#include 

int array = ;

#define array_num (sizeof(array)/sizeof(array[0]))

int main()

上面的**就是定義乙個int型的陣列,然後用sizeof求出陣列大小(24),然後求每個元素大小(4),所以巨集應該為6是乙個

正數,下面函式中d為負數,if語句中的表示式為真,應該是輸出「enter if」這個語句的,但是,輸出的是「not enter if」。

這又是為什麼呢?

原因就在sizeof返回的是unsigned int型的值,是無符號的正數,if語句中在signed int和

unsigned int兩者的比較中,把d公升

級為unsigned int的值,-1轉換成unsigned int的值是乙個巨大的正數,所以if裡面的表示式為假,輸出「not enter if」。

這種問題要解決可以在if中

array_num前加乙個(int)強制轉換。

所以,記住兩點:

第一、sizeof返回的是正數

第二、使用無符號和有符號的時候一定要注意,特別是它們在比較的時候

微軟的乙個BUG

各位,我不知道我的這個發現屬不屬於微軟的乙個bug round 1.225,2 1.23 round 1.245,2 1.25 round 1.265,2 1.26 round 1.285,2 1.28 按照技術文章上說的,vb中round 函式屬於四捨五入函式,但實際執行當中,其實round 函式...

乙個微妙的bug

都知道不同型別運算元進行運算時,發生的轉換,資料型別一般朝著浮點度更高,長度更長的方向轉換,但signed 向unsigned 轉換得多多注意了,有如下 includeint a define cd sizeof a sizeof int sizeof 還回值為unsigned int main 最...

乙個 Bug 的生命

android 開源專案維護乙個公共問題追蹤,你能報告 bug 和要求特徵為 android 軟體棧。這個問題上的跟蹤細節,請看報告 bug 頁 報告 bug 是偉大的 感謝你!但是一旦你歸檔乙個 bug 報告發生了什麼?這頁介紹乙個 bug 的生命。租約注意 android 開源專案 aosp 問...