GCC警告';比较总是正确的;将NTOH的返回值与整数进行比较时

GCC警告';比较总是正确的;将NTOH的返回值与整数进行比较时,c,gcc-warning,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.")

我很难理解为什么在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");
}
uint16\u t端口号=23620;

如果(ntohs(端口号)>=0和&ntohs(端口号)
ntohs
返回一个
uint16\u t
。由于
uint16\u t
是无符号的,它将始终大于或等于
0
。因此,
ntohs(端口号)>=0
将始终解析为true。这就是您收到警告的原因。

触发警告的只是
=0
,因为
uint16\u t
是无符号的,所以总是非负的。在询问之前阅读函数手册页总是一个好主意。@Olaf您能告诉我在这个函数的手册页中有一个可以帮助我的信息?因为除了uint16\u t之外,我还没有发现任何与我的问题相关的有用信息。@HenriqueGouveia:编程就是要自己思考。这是C基础知识:无符号整数的最小值是多少?@Olaf。抱歉,找不到它。