簡體   English   中英

使用int和UINT32警告C4018,但不使用int和UCHAR警告

[英]Warning C4018 with int and UINT32, but not with int and UCHAR

使用VS 2017,此片段生成編譯器警告C4018:

UINT32 numChars(2);
int i;
for( i=0; i<numChars; i++ )

但這不是:

UCHAR numChars(2);
int i;
for( i=0; i<numChars; i++ )

回顧

typedef unsigned int UINT32
typedef unsigned char UCHAR

為什么行為不同?

比較不同類型的整數時,通常采用算術轉換。 這意味着如果適用,則首先提升兩個整數,然后,如果結果仍然是不同類型,則將精度較低的類型轉換為精度較高的類型,或者,如果兩個精度相同,則將帶符號的類型轉換為無符號的類型一。

因此,在第一種情況下,您有一個unsigned int和一個signed int。 由於它們都已經是int,因此都不會被提升,因此有符號的int會轉換為unsigned。 當它作為比較的一部分發生時,將觸發警告。

在第二種情況下,因為UCHAR可以由一個表示,所以它會被提升為一個有符號的int。 現在,您正在比較兩個帶符號的整數,因此不需要進行進一步的轉換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM