Следующий код:
#include <stdint.h>
int main() {
uint8_t Byte;
if (Byte < 0) { }
}
выдает следующее предупреждение о компиляции:
main.cpp: In function `int main()':
main.cpp:6: warning: comparison is always false due to limited range of data type
Это отлично. Но когда я меняю условие на:
(1) if (true || (Byte < 0)) { }
Я все еще получаю предупреждение, в то время как я ожидаю получить предупреждение типа "сравнение всегда верно..." :)
Если я изменю объявление байта на:
(2) uint32_t Byte;
предупреждение исчезает.
Как я могу объяснить поведение?
Моя система RHEL 5.3 64 бит поставляется с gcc 4.1.2.
ИЗМЕНИТЬ:
(1) не проблема, я просто неправильно понял предупреждение компилятора. Он не говорит, что все if равно false, а скорее «Байт ‹ 0».
Таким образом, проблема только (2) - почему тип Byte вызывает предупреждение компилятора. Константа "0" имеет тип int, поэтому ее размер 4 байта. Так что это должно быть связано со сравнением, если uint8_t с int