在C ++中跨数据类型的分配

时间:2009-10-13 10:17:35

标签: c++ visual-c++ types

  

可能重复:
  Make VS compiler catch signed/unsigned assignments?

我在VC ++ 2005/2008中编译了以下代码片段:

unsigned long ul = ...;
signed long l = ...;

l = ul; 

并期望看到编译器警告(警告级别设置为4),但没有生成。我错过了一些明显的东西吗?

由于

3 个答案:

答案 0 :(得分:2)

如果省略的初始化程序是编译时常量,静态分析器可能能够确定不会发生溢出并让它在没有警告的情况下滑动。尝试将ul初始化为某些内容> 2 ^ 31 -1并查看会发生什么(假设您使用的是32位平台)。

答案 1 :(得分:1)

我认为这是重复(here) 引用接受的答案:

  

您需要启用警告4365来捕捉作业   这可能很棘手 - 您需要启用所有警告 - 使用/ Wall可以发出大量警告,因此您可能在查看警告时遇到一些麻烦,但确实如此。 (quamrana)

     
    

您也可以使用#pragma warning(默认值:4365)启用。 (ChrisN)

  

答案 2 :(得分:1)

警告是特定于编译器的。您“应该”看到一个警告,“它会帮助您”看一个警告,但Visual C ++团队默认情况下没有选择显示一个警告。