在MSVC -Wall的标准头文件中有上千个警告是什么? [英] What's up with the thousands of warnings in standard headers in MSVC -Wall?

查看:908
本文介绍了在MSVC -Wall的标准头文件中有上千个警告是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有些人似乎建议你使用-Wall,但是当我在一个小的测试项目,它只有一个main.cpp与一些包括,我得到5800警告大多数在标准头部或窗口标题。 / p>

这是预期的行为吗?



这里只是一些阅读乐趣:

  1> c:\program files\microsoft visual studio 10.0 \vc\include\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\预处理程序宏,将'#if /#elif'替换为'0'
1> c:\program files\microsoft visual studio 10.0 \vc\include\wchar.h(109):warning C4820:'_wfinddata64i32_t':在数据成员'_wfinddata64i32_t :: attrib'后添加'4'字节填充
1> c:\program files\microsoft visual studio 10.0 \vc\include\wchar.h (114):warning C4820:'_wfinddata64i32_t':在数据成员'_wfinddata64i32_t :: name'
1> c:\program files\ microsoft visual studio 10.0 \vc\include \wchar.h(118):warning C4820:'_wfinddata64_t':在数据成员'_wfinddata64_t :: attrib'后添加'4'字节填充
1> c:\program files\microsoft visual studio 10.0 \\ \\ vc \include\wchar.h(488):warning C4820:'_stat32':在数据成员'_stat32 :: st_gid'后添加'2'字节填充
1> c:\program files\ microsoft visual studio 10.0 \vc\include\wchar.h(504):warning C4820:'stat':'2'字节填充在数据成员'stat :: st_gid'后面添加
1> c: \\ programprogram files \ microsoft visual studio 10.0 \vc\include\wchar.h(520):warning C4820:'_stat32i64':在数据成员'_stat32i64 :: st_gid'后添加'2'字节填充
1> c:\program files\microsoft visual studio 10.0 \vc\include\wchar.h(521):warning C4820:'_stat32i64':在数据成员'_stat32i64 :: st_rdev之后添加'4' '
1> c:\program files\microsoft visual studio 10.0 \vc\include\wchar.h(525):warning C4820:'_stat32i64':在数据成员之后添加'4' '_stat32i64 :: st_ctime'
1> c:\program files\microsoft visual studio 10.0 \vc\include\wchar.h(534):warning C4820:'_stat64i32':'2'bytes填充数据成员_stat64i32 :: st_gid后添加
1> c:\program files\microsoft visual studio 10.0 \vc\include\wchar.h(548):warning C4820:'_stat64' :在数据成员'_stat64 :: st_gid'
1> c:\ program files \ microsoft visual studio 10.0 \vc\include\wchar.h(549)之后添加'2'字节填充C4820:'_stat64':在数据成员_stat64 :: st_rdev后添加了'4'字节填充
1> c:\program files\microsoft visual studio 10.0 \vc\include\crtdbg.h (1078):warning C4986:'operator new []':异常规范与先前的声明不匹配
1> c:\program files\microsoft visual studio 10.0 \vc\include\\\
ew(79):参见声明operator new []
1> c:\program files\microsoft visual studio 10.0 \vc\include\crtdbg.h(1095):warning C4986:'operator delete []':异常规范与先前的声明不匹配
1> c:\program files\microsoft visual studio 10.0 \vc\include\\\
ew(77):查看operator delete []的声明
1> c:\program files\microsoft visual工作室10.0 \vc\include\typeinfo(76):警告C4820:'type_info':在数据成员'type_info :: _ M_d_name'
1> c:\program files \\ \\ microsoft sdks \windows \v7.0a\include\basetsd.h(114):warning C4668:'__midl'未定义为预处理器宏,将'#if /#elif'替换为'0'
1> c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(8154):warning C4820:'_SECURITY_QUALITY_OF_SERVICE':'2'数据成员'_SECURITY_QUALITY_OF_SERVICE :: EffectiveOnly'
1> c:\program files\microsoft sdks\windows\v7.0a\\\\\\\\\\\\\\\
t :在数据成员'_SE_IMPERSONATION_STATE :: EffectiveOnly'
1> c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(8334)之后添加'2' ):warning C4820:'_QUOTA_LIMITS':在数据成员'_QUOTA_LIMITS :: PagefileLimit'后添加'4'字节填充
1> c:\program files\microsoft sdks\windows \v7.0a\ include_\\winnt.h(8357):warning C4820:'_QUOTA_LIMITS_EX':在数据成员'_QUOTA_LIMITS_EX :: PagefileLimit'
1> c:\ programgram \ microsoft sdks \ windows \v7.0a\include\winnt.h(8405):warning C4820:'_JOBOBJECT_BASIC_LIMIT_INFORMATION':在数据成员_JOBOBJECT_BASIC_LIMIT_INFORMATION :: SchedulingClass
1> c:\程序文件\microsoft sdks\windows\v7.0a\include\winnt.h(8984):警告C4820:'_FILE_NOTIFY_INFORMATION':在数据成员'_FILE_NOTIFY_INFORMATION :: FileName'$ b后添加'2'字节填充$ b 1> c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(9012):warning C4820:'_REPARSE_GUID_DATA_BUFFER':在数据成员之后添加了3个字节的填充'_REPARSE_GUID_DATA_BUFFER :: GenericReparseBuffer'
1> c:\program files\microsoft sdks\windows\v7.0a\\\\\\\\\\\\\\\\\\\\\\\\\\ < notamed-tag> :: Data'
1> c:\program files\microsoft sdks \windows \v7.0a\包含\winnt.h(10241):warning C4820:'< unnamed-tag>':在数据成员< unnamed-tag> :: DecreaseTime' \program files\microsoft sdks\windows\v7.0a\include\winnt.h(10262):warning C4820:'< unnamed-tag>':'4'字节填充在数据成员 < unnamed-tag> :: TimerInterval'
1> c:\program files\microsoft sdks\windows\v7.0a\\\\\\\wincrypt.h(1440):warning C4668: NTDDI_WINLH'未定义为预处理器宏,为'#if /


替换为'0'

解决方案

Visual C ++ / Wall 启用默认情况下禁用的所有警告在 / W4 。正如你已经发现的,有一个很好的原因,为什么很多这些警告被禁用默认情况下(感谢,编译器,告诉我你添加了填充;我真的很感激它!)。最好在Visual C ++上使用 / W4



Intel C ++也是这样知道使用EDG前端的其他编译器)。如果将它设置为 / W5 ,它会发出大量的信息消息。我个人最喜欢的是它警告你,如果存储类说明符不在声明的开始(因此, const static int 是没有去,但 static const int 很好)。


Some people seem to advise you use -Wall, but when I did it on a small test project which just has a main.cpp with some includes, I get 5800 warnings most of them in standard headers or in windows headers.

Is that intended behaviour? How do I go about making my compilation warning free?

Here are just a few for some reading fun:

1>c:\program files\microsoft visual studio 10.0\vc\include\stdint.h(105): warning C4668: '_INTPTR' is not defined as a preprocessor macro, replacing with '0' for '#if/#elif'
1>c:\program files\microsoft visual studio 10.0\vc\include\wchar.h(109): warning C4820: '_wfinddata64i32_t' : '4' bytes padding added after data member '_wfinddata64i32_t::attrib'
1>c:\program files\microsoft visual studio 10.0\vc\include\wchar.h(114): warning C4820: '_wfinddata64i32_t' : '4' bytes padding added after data member '_wfinddata64i32_t::name'
1>c:\program files\microsoft visual studio 10.0\vc\include\wchar.h(118): warning C4820: '_wfinddata64_t' : '4' bytes padding added after data member '_wfinddata64_t::attrib'
1>c:\program files\microsoft visual studio 10.0\vc\include\wchar.h(488): warning C4820: '_stat32' : '2' bytes padding added after data member '_stat32::st_gid'
1>c:\program files\microsoft visual studio 10.0\vc\include\wchar.h(504): warning C4820: 'stat' : '2' bytes padding added after data member 'stat::st_gid'
1>c:\program files\microsoft visual studio 10.0\vc\include\wchar.h(520): warning C4820: '_stat32i64' : '2' bytes padding added after data member '_stat32i64::st_gid'
1>c:\program files\microsoft visual studio 10.0\vc\include\wchar.h(521): warning C4820: '_stat32i64' : '4' bytes padding added after data member '_stat32i64::st_rdev'
1>c:\program files\microsoft visual studio 10.0\vc\include\wchar.h(525): warning C4820: '_stat32i64' : '4' bytes padding added after data member '_stat32i64::st_ctime'
1>c:\program files\microsoft visual studio 10.0\vc\include\wchar.h(534): warning C4820: '_stat64i32' : '2' bytes padding added after data member '_stat64i32::st_gid'
1>c:\program files\microsoft visual studio 10.0\vc\include\wchar.h(548): warning C4820: '_stat64' : '2' bytes padding added after data member '_stat64::st_gid'
1>c:\program files\microsoft visual studio 10.0\vc\include\wchar.h(549): warning C4820: '_stat64' : '4' bytes padding added after data member '_stat64::st_rdev'
1>c:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h(1078): warning C4986: 'operator new[]': exception specification does not match previous declaration
1>          c:\program files\microsoft visual studio 10.0\vc\include\new(79) : see declaration of 'operator new[]'
1>c:\program files\microsoft visual studio 10.0\vc\include\crtdbg.h(1095): warning C4986: 'operator delete[]': exception specification does not match previous declaration
1>          c:\program files\microsoft visual studio 10.0\vc\include\new(77) : see declaration of 'operator delete[]'
1>c:\program files\microsoft visual studio 10.0\vc\include\typeinfo(76): warning C4820: 'type_info' : '3' bytes padding added after data member 'type_info::_M_d_name'
1>c:\program files\microsoft sdks\windows\v7.0a\include\basetsd.h(114): warning C4668: '__midl' is not defined as a preprocessor macro, replacing with '0' for '#if/#elif'
1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(8154): warning C4820: '_SECURITY_QUALITY_OF_SERVICE' : '2' bytes padding added after data member '_SECURITY_QUALITY_OF_SERVICE::EffectiveOnly'
1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(8165): warning C4820: '_SE_IMPERSONATION_STATE' : '2' bytes padding added after data member '_SE_IMPERSONATION_STATE::EffectiveOnly'
1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(8334): warning C4820: '_QUOTA_LIMITS' : '4' bytes padding added after data member '_QUOTA_LIMITS::PagefileLimit'
1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(8357): warning C4820: '_QUOTA_LIMITS_EX' : '4' bytes padding added after data member '_QUOTA_LIMITS_EX::PagefileLimit'
1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(8405): warning C4820: '_JOBOBJECT_BASIC_LIMIT_INFORMATION' : '4' bytes padding added after data member '_JOBOBJECT_BASIC_LIMIT_INFORMATION::SchedulingClass'
1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(8984): warning C4820: '_FILE_NOTIFY_INFORMATION' : '2' bytes padding added after data member '_FILE_NOTIFY_INFORMATION::FileName'
1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(9012): warning C4820: '_REPARSE_GUID_DATA_BUFFER' : '3' bytes padding added after data member '_REPARSE_GUID_DATA_BUFFER::GenericReparseBuffer'
1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(10131): warning C4820: '<unnamed-tag>' : '3' bytes padding added after data member '<unnamed-tag>::Data'
1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(10241): warning C4820: '<unnamed-tag>' : '4' bytes padding added after data member '<unnamed-tag>::DecreaseTime'
1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(10262): warning C4820: '<unnamed-tag>' : '4' bytes padding added after data member '<unnamed-tag>::TimerInterval' 
1>c:\program files\microsoft sdks\windows\v7.0a\include\wincrypt.h(1440): warning C4668: 'NTDDI_WINLH' is not defined as a preprocessor macro, replacing with '0' for '#if/

解决方案

The Visual C++ /Wall enables all of the warnings that are disabled by default at /W4. As you've found out, there is a good reason why a lot of those warnings are disabled by default (thanks, compiler, for telling me you've added padding; I really appreciate it!). It's probably best just to use /W4 on Visual C++.

Intel C++ is like this too (I don't know about other compilers that utilize the EDG frontend). If you set it at /W5, it spews out tons of informational messages. My personal favorite is that it warns you if the storage class specifier isn't at the beginning of a declaration (so, const static int is no go, but static const int is fine).

这篇关于在MSVC -Wall的标准头文件中有上千个警告是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆