将 ntohs 的 return 与整数进行比较时,GCC 警告 'comparison is always true'

GCC warning 'comparison is always true' when comparing the return of ntohs with a integer

我很难理解为什么我在 Linux 上使用 GCC 4.8.4 时收到此编译警告:

warning: comparison is always true due to limited range of data type [-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");
}

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

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