我很难理解为什么我在Linux上使用GCC 4.8.4时会收到此编译警告:
警告:由于数据类型的范围有限[-Wtype-limits]
,因此比较始终为真
比较这些值:
uint16_t port_number = 23620;
if (ntohs(port_number) >= 0 && ntohs(port_number) <= 1023) {
puts("The compiler warns that I will always end up here.");
} else {
puts("Not reached");
}
据我所知,问题是由于此比较中涉及的每个值支持的最大大小。但是我怎样才能更好地理解它并修复它呢?
答案 0 :(得分:4)
ntohs
返回uint16_t
。由于uint16_t
是无符号的,因此它始终大于或等于0
。因此,ntohs(port_number) >= 0
将始终解析为true。这就是你收到警告的原因。