【问题标题】:How to get rid of integer overflow warning?如何摆脱整数溢出警告?
【发布时间】:2011-11-07 10:55:17
【问题描述】:

在我的 C++ 代码中,我有一个表达式,我将 unsigned long 整数乘以 int 以将结果分配给 unsigned long int。我收到“溢出返回值”的警告。我试图将 int 转换为 unsigned long 但它没有帮助。任何建议...

表达式是这样的-

uint64_t size = 0;
uint64_t value = getvalue();
int pageSize= getPageSize();
size = value*(uint64_t)pageSize;

【问题讨论】:

  • 你能把你的代码贴在这里吗?
  • 如果想要溢出并且您只想抑制警告,请尝试使用unsigned int 而不是普通的int
  • 溢出不是有意的,返回纯 int 的函数不能更改为返回 unsigned long 也不是返回值'size'。
  • 我们在这里讨论的是哪个编译器和版本?这不适用于 gcc/g++ 4.5.2。我尝试使用 -Wall、-Wextra 和 -pedantic 以及 -Wstrict-overflow=N 的变体
  • 这出现在静态代码检查工具中..

标签: c++ int overflow unsigned-integer


【解决方案1】:

您的工具可能有办法为这行代码设置异常。

如果该工具真的很聪明,这是唯一的方法,因为这里真的存在溢出的风险(因为int 可能无法容纳2^64-1)。

【讨论】:

    【解决方案2】:

    以下应该做的工作:

    size = value*(uint64_t)(unsigned int)pageSize;
    

    【讨论】:

      猜你喜欢
      • 2017-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-23
      • 2016-02-04
      • 2021-11-08
      • 1970-01-01
      相关资源
      最近更新 更多