将 int 分配给 Short 时没有警告(gcc)

发布于 2024-10-10 04:56:25 字数 793 浏览 7 评论 0原文

我经常使用将“较长”类型变量分配给“较短”类型变量,例如将 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 没有输出任何警告)。实际上,它从不针对任何输入和输出类型(例如longunsigned char)输出任何警告。

我从未在 gcc 中发现实际的错误,所以我几乎确定这种行为是有原因的。

那么为什么没有警告呢?

更新:我使用 gcc 4.1.2。

I often use assignment of "longer" typed variables to "shorter" ones, for example int to short or uint32_t to uint8_t. One day i decided to find all such cases in my code using gcc, but found to my amazement that gcc didn't output any warnings!

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

Using gcc -Wall or gcc -Wconversion didn't help (gcc didn't output any warning). Actually, it never output any warning for any input and output type (e.g. long and unsigned char).

I have never found an actual bug in gcc so i am almost sure this behavior has a reason.

So why no warning?

Update: i use gcc 4.1.2.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

耀眼的星火 2024-10-17 04:56:25

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

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

http://gcc.gnu.org/wiki/NewWconversion 证实了这一点。

这个错误:http://gcc.gnu.org/bugzilla/show_bug.cgi? id=2707 也谈到了这一点。

This feature was added in gcc 4.3 version. Previously this was not available.

I hope you are using gcc version 4.2 or below.

http://gcc.gnu.org/wiki/NewWconversion confirms this.

This bug: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=2707 also talks about it.

山人契 2024-10-17 04:56:25

我无法重现这一点。使用 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

I can't reproduce that. Compiling this code with gcc 4.4.5 with -Wconversion, I get

a.cc: In function ‘void f()’:
a.cc:7: warning: conversion to ‘short int’ from ‘int’ may alter its value
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文