【发布时间】:2017-09-14 18:03:44
【问题描述】:
我很难理解为什么在 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");
}
我了解问题出在此比较中涉及的每个值所支持的最大大小。但是我怎样才能更好地理解并解决它呢?
【问题讨论】:
-
只有
>= 0会触发警告,因为uint16_t是无符号的,因此总是非负数。 -
在询问之前阅读函数的手册页总是一个好主意。
-
@Olaf 你能告诉我这个函数的手册页哪里有可以帮助我的信息吗?因为我没有找到任何与我的问题相关的有用信息......除了 uint16_t。
-
@HenriqueGouveia:编程就是为自己思考。这是 C 基础知识:unsigned 整数可以具有的最小值是多少?
-
@Olaf。抱歉,没找到。
标签: c gcc-warning