将 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");
}
我了解问题是由于此比较中涉及的每个值支持的最大大小。但是我怎样才能更好地理解并修复它呢?
ntohs
returns一个uint16_t
。由于 uint16_t
是无符号的,它总是大于或等于 0
。因此,ntohs(port_number) >= 0
将始终解析为 true。这就是您收到警告的原因。
我很难理解为什么我在 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");
}
我了解问题是由于此比较中涉及的每个值支持的最大大小。但是我怎样才能更好地理解并修复它呢?
ntohs
returns一个uint16_t
。由于 uint16_t
是无符号的,它总是大于或等于 0
。因此,ntohs(port_number) >= 0
将始终解析为 true。这就是您收到警告的原因。