【问题标题】:Is there a gcc 4.2 warning similar to Visual Studio's regarding possible loss of data?是否有类似于 Visual Studio 的关于可能丢失数据的 gcc 4.2 警告?
【发布时间】:2009-04-21 21:54:25
【问题描述】:

gcc 是否有一个标志,以便从 long 到 short 的转换会生成有关可能丢失数据的警告?

我正在开发一个针对 Visual Studio (2005) 和 GCC 4.2(针对 Mac OS X)编译的 C++ 应用程序。

Visual Studio 打印出的警告遵循以下模式:

: warning C4244: 'argument' : conversion from 'long' to 'short', possible loss of data

我已经尝试过 -Wconversion,但这并不是我想要的。到目前为止,我唯一能找到的是一个实验性标志 -Wcoercion,它与 GCC 4.3 相关联(我不确定我们是否还想投资)。

2009 年 4 月 22 日 @ 11:00 EST 编辑:为了澄清,我想看到那个警告。我们有代码,我们想知道何时会发生数据丢失。如果我有代码:

unsigned long value1 = LONG_MAX;
std::cout << "value1: " << value1 << std::endl;

unsigned short value2 = value1;
std::cout << "value2: " << value2 << std::endl;

我得到了这个预期的结果:

值1:2147483647
值2:65535

在我们的代码中,我们放置了特殊的断言来执行强制,并在执行的代码会导致数据丢失时警告我们。我们使用 Visual Studio 的警告在我们的大型代码库中找到了这些位置。

有什么方法可以在 gcc 4.2 中生成这些警告?

【问题讨论】:

    标签: c++ gcc visual-studio-2005


    【解决方案1】:

    GCC 4.2 不支持此功能,但在 GCC 4.3 中已添加。 Wiki page explaining it.

    感谢 schnaader 和 Evan Teran 提供了引导我到达那里的链接。

    【讨论】:

    • 对于可能的数据丢失验证,请尝试-Wshorten-64-to-32-Wconversion 还将检查签名错误(可能是矫枉过正)。
    • -Wshorten-64-to-32 不被 GCC 接受,只有 Clang 接受。
    【解决方案2】:

    看看这个GCC bug entry,也许它有助于理解为什么从长转换为短不会导致警告。

    【讨论】:

    • 这实际上并没有回答我的问题。但是感谢您的关注。
    【解决方案3】:

    使用-Wconversion。即使您已经指定了 -Wall,您似乎也需要它。

    它绝对适用于 gcc4.3。如果 4.2 版没有修复它,您必须升级才能获得它。

    警告示例:

    warning: conversion to 'short int' from 'int' may alter its value
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-07
      相关资源
      最近更新 更多