2017-09-14 30 views
-1

我有一个很难理解为什么我得到,而在Linux上使用GCC 4.8.4本汇编警告时:GCC警告“比较始终是真正的”比较ntohs和与一个整数返回

警告:比较是总是如此由于范围有限的数据类型的[-Wtype-限制]

比较值时,像这样的:

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"); 
} 

据我所知,PR这是由于该比较涉及的每个值所支持的最大尺寸。但是,我怎样才能更好地理解这一点并解决它?

+5

这仅仅是'> = 0'触发警告,因为'uint16_t'是无符号的,所以总是负数。 – ecatmur

+0

在提问之前阅读功能手册总是一个好主意。 – Olaf

+0

@Olaf你能告诉我在哪里,在这个函数的手册页有一个信息,可以帮助我?因为我没有发现任何有用的东西,这与我的问题有关......除了uint16_t。 –

回答

4

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