的可能損失,我有以下的C代碼:條件運算符:從 'INT' 爲'無符號字符的轉換,數據
a = (b == B1) ? A1 : A2;
a
,b
,A1
,A2
和B1
都是unsigned char
類型。 A1
,A2
和B1
都是常數。
VC時正在編制++我看到下面的警告:
warning C4244: '=' : conversion from 'int ' to 'unsigned char ', possible loss of data
我不明白這樣的警告 - 沒有一個變量是int
類型。據推測,某種隱含的轉換正在發生,但爲什麼?
奇怪的是,下面的代碼(這是功能相同)編譯沒有警告:
if (b == B1) {
a = A1;
} else {
a = A2;
}
到目前爲止我所知,兩個代碼提取物應該是相同的。
使用'#define A1 42','A1'的類型是'int',而不是'unsigned char'。只是說。無論如何......我傾向於認爲你是用C++編譯器編譯的,而且問題是錯誤標記的。 – pmg 2011-05-24 18:11:40
@pmg - 常量被定義爲casts - 請參閱下面我對Paulo的回答的評論。我不知道在編譯C而不是C++代碼時MS VC++是否做了什麼不同,所以我不知道這是否有所作爲。 – sam 2011-05-24 18:32:50
那麼,你的編譯器試圖比它真正需要的更有幫助:)關於將'int'分配給'unsigned char'的警告不需要C. – pmg 2011-05-24 19:10:24