【问题标题】:No warning on assignment of int to short (gcc)没有关于将 int 分配给 short (gcc) 的警告
【发布时间】:2011-01-02 18:57:22
【问题描述】:

我经常使用将“较长”类型变量分配给“较短”变量,例如将int 分配给short 或将uint32_t 分配给uint8_t。有一天,我决定使用 gcc 在我的代码中查找所有此类情况,但令我惊讶的是 gcc 没有输出任何警告!

int long_value;
short short_value;
std::cin >> long_value; // Example input: 32769
short_value = long_value; // MS Visual Studio complains here at warning level 4
std::cout << "Long: " << long_value << '\n'; // My example output: 32769
std::cout << "Short: " << short_value << '\n'; // My example output: -32767

使用gcc -Wall 或gcc -Wconversion 没有帮助(gcc 没有输出任何警告)。实际上,对于任何输入和输出类型(例如long 和unsigned char),它都不会输出任何警告。

我从未在 gcc 中发现过真正的错误,所以我几乎可以肯定这种行为是有原因的。

那为什么没有警告呢?

更新:我使用 gcc 4.1.2。

【问题讨论】:

  • @icecrime:gcc 当然需要编译它。在 short 比 int 短的平台上,它应该并且确实会发出警告。

标签: c++ gcc compiler-warnings implicit-conversion


【解决方案1】:

此功能是在 gcc 4.3 版本中添加的。以前这是不可用的。

我希望您使用的是 gcc 4.2 或更低版本。

http://gcc.gnu.org/wiki/NewWconversion 确认了这一点。

这个bug:http://gcc.gnu.org/bugzilla/show_bug.cgi?id=2707也讲了。

【讨论】:

    【解决方案2】:

    我无法重现。用 gcc 4.4.5 和 -Wconversion 编译这段代码,我得到了

    a.cc: In function ‘void f()’:
    a.cc:7: warning: conversion to ‘short int’ from ‘int’ may alter its value
    

    【讨论】:

    • 是的,我也是 4.5.2 -Wconversion。
    猜你喜欢
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    相关资源
    最近更新 更多