2010-07-09 37 views
7

当我使用g ++ 4.1.2编译下面的代码而没有任何警告时启用了-Wall -Wextra -Wconversion,我感到非常惊讶。如何获得编译警告

我希望g ++向我展示每一个警告,以避免潜在的伤害。我必须坚持g ++ 4.1.2。

#include <stdint.h> 
#include <string> 

using namespace std; 

int main() 
{ 
    uint8_t u1=1; 
    uint64_t u64=1000; 
    string s1=""; 

    u1=u64; // want warning here 
    s1=u64; // want warning here 
    s1=u1; 
} 
+2

我想你会发现英文短语是“想要”,而不是“想要”。 – paxdiablo 2010-07-09 07:42:29

+0

你不想在最后一行发出警告?从unsigned char到字符串赋值的意图是什么? – 2010-07-09 07:52:35

+0

@David:'string'有'operator =(char)'。 – 2010-07-09 08:00:30

回答

4

恐怕4.3之前的GCC似乎不支持这个。 -Wconversion的描述在4.2和4.3之间变化以反映新的警告行为,并且没有迹象表明4.3以前的GCC会检查这一点。

+2

我可以确认它,gcc 4.3产生警告,4.2不会 – Anycorn 2010-07-09 07:51:01

+0

我也可以确认GCC 4.4产生警告,并且只能用'-Wconversion'enabled – rubenvb 2010-07-09 07:56:26

+0

Thx。然后,我将不得不寻找一些静态C++代码分析工具。 – lyman 2010-07-09 08:37:50