2017-09-14 84 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。這就是爲什麼你會收到警告。