首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >警告:由于gcc 4.1.2版本中的数据类型范围有限,所以比较总是错误的

警告:由于gcc 4.1.2版本中的数据类型范围有限,所以比较总是错误的
EN

Stack Overflow用户
提问于 2013-03-14 08:15:09
回答 4查看 17.3K关注 0票数 6

我遇到了来自gcc 4.1.2的以下警告:

代码语言:javascript
运行
复制
warning: comparison is always false due to limited range of data type

相关的C代码如下所示:

代码语言:javascript
运行
复制
if ( unlikely(count < 0) ) BUG();

其中'count‘是无符号的。

我尝试禁用该警告,因为我不允许修改源代码:

代码语言:javascript
运行
复制
-Wno-type-limits

但似乎gcc 4.1.2并不支持它。

代码语言:javascript
运行
复制
cc1: error: unrecognized command line option "-Wno-type-limits"

有没有其他方法可以消除这个警告?

EN

回答 4

Stack Overflow用户

发布于 2013-03-14 08:21:46

unsigned值永远不会为负-因此会出现警告。与其说是“不可能”,不如说是“不可能”。

这通常表示代码中存在某种错误;编写代码时要求类型允许负值,但该类型不允许负值。因此,由于期望的不匹配,代码很可能会出现错误行为。

请注意,在一些机器上,普通char是有符号的,而在另一些机器上是无符号的(而且它是一种既不同于signed char又不同于unsigned char的类型,尽管它的值范围与这两者重叠)。

票数 9
EN

Stack Overflow用户

发布于 2014-10-10 15:32:27

修复此警告的选项:

始终为真的true

  • best:删除条件的
  1. 删除条件+添加static_assert以确保类型是无符号的。(对于C版本的here)
  2. for look here)
  3. for gcc 4.3之前的版本:删除编译器选项:用于gcc的-Wextra
  4. 4.3+添加选项:-Wno-type-limits
票数 4
EN

Stack Overflow用户

发布于 2013-03-14 12:08:08

根据源代码的年龄,它可能会在编译器不像现在的gcc那样类型安全的时候以防御性的方式编写。

该警告看起来像是-Wextra (又称-W)警告选项集的一部分,所以如果您需要额外的警告,这将是其中之一。我个人使用的是-Wall,信不信由你,它不包括“额外”的东西。你可能认为"all“包括"extra”,但我猜不是...

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15398947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档