c語言隱式型別轉換 小心!

2021-09-05 09:47:16 字數 843 閱讀 9168

今天查乙個和rtp協議有關的bug,**不是我寫的,如果是我寫很有可能也會犯這個錯誤。

為了對應這個問題,我先是把網上關於rtp協議的部落格又大致看了一遍,然後有把出錯的函式的功能簡單過了一遍。

又把除錯資訊列印了一遍。最後基本確定是隱式型別轉換的問題,不需要做什麼大的改動。

因為是前人寫的**,理解和修改都得小心翼翼,怕改了引發新的bug。

錯誤**:if ((packet->last_seq_num +

1)  != last_seq_num)

//( 其中packet->last_seq_num,last_seq_num均是unsigned short型別)

//數字1預設是 int 型別,這樣就會導致隱式型別轉換,埋下了乙個bug。

正確的**:if ((unsigned short)(packet->last_seq_num + (unsigned short)

1)  != last_seq_num)

//注意, 需要兩次強制轉換:① 1預設是int 型別需要強制轉換

//  ②(packet->last_seq_num + (unsigned short)

1) 相加的

//的和也需要轉換,否則二者想加溢位後預設型別又是int了

解決了這個bug,讓我對公司強制要求的**規更加認同了,有些**規範我們覺得很死板可能是見識的少,

缺乏對**規範的重視。

c語言隱式型別轉換

隱式型別轉換分三種,即算術轉換 賦值轉換和輸出轉換。1 算術轉換 進行算術運算 加 減 乘 除 取餘以及符號運算 時,不同型別數招必須轉換成同 一型別的資料才能運算,算術轉換原則為 整型提公升 對於所有比int小的型別,包括char,signed char,unsigned char,short,u...

C語言隱式型別轉換

隱式型別轉換分三種,即算術轉換 賦值轉換和輸出轉換。1 算術轉換 進行算術運算 加 減 乘 除 取餘以及符號運算 時,不同型別數招必須轉換成同 一型別的資料才能運算,算術轉換原則為 整型提公升 對於所有比int小的型別,包括char,signed char,unsigned char,short,u...

C 隱式型別轉換

c 定義了一組內建型別物件之間的轉換標準,在必要時它們被編譯器隱式的應用到物件上。發生隱式型別轉換的情景 1,在混合型別的算術表示式中 轉換原則 轉換為最寬的資料型別。也可叫,算術轉換。int ival 5 double dval 3.14 ival 被提公升為double型別 ival dval ...