следующий код:
#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.
EDIT:
(1) не проблема, я просто неправильно понял предупреждение компилятора.
Он не говорит, что целое if равно false , а скорее "Byte <0". </p>
Итак, проблема только в (2) - почему тип Byte вызывает предупреждение компилятора.
Константа "0" имеет тип int , поэтому ее 4 байта. Так что это должно быть связано со сравнением, если uint8_t с int