当将ntohs的返回值与整数进行比较时,GCC警告“比较始终为真”

时间:2017-09-14 18:03:44

标签: c gcc-warning

我很难理解为什么我在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");
}

据我所知,问题是由于此比较中涉及的每个值支持的最大大小。但是我怎样才能更好地理解它并修复它呢?

1 个答案:

答案 0 :(得分:4)

ntohs返回uint16_t。由于uint16_t是无符号的,因此它始终大于或等于0。因此,ntohs(port_number) >= 0将始终解析为true。这就是你收到警告的原因。