是否有类似于Visual Studio的gcc 4.2警告可能会丢失数据?

Lyn*_*son 5 c++ gcc visual-studio-2005

是否有gcc的标志,从长到短的转换会产生关于可能丢失数据的警告?

我正在开发一个为Visual Studio(2005)和GCC 4.2(适用于Mac OS X)编译的C++应用程序.

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

: warning C4244: 'argument' : conversion from 'long' to 'short', possible loss of data
Run Code Online (Sandbox Code Playgroud)

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

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

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

unsigned short value2 = value1;
std::cout << "value2: " << value2 << std::endl;
Run Code Online (Sandbox Code Playgroud)

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

  value1:2147483647
  value2:65535

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

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

Jam*_*kin 5

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

它在 gcc4.3 中绝对有效。如果 4.2 版本未修复该问题,则必须升级才能获得它。

警告示例:

warning: conversion to 'short int' from 'int' may alter its value
Run Code Online (Sandbox Code Playgroud)


use*_*876 5

GCC 4.2 中不支持此功能,但在 GCC 4.3 中添加了该功能。 维基页面对此进行了解释

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