C++ 我是否应该关心4级警告?

C++ 我是否应该关心4级警告?,c++,visual-studio,visual-c++,compiler-warnings,C++,Visual Studio,Visual C++,Compiler Warnings,我正在做一个中型项目(一个游戏引擎),我曾经决定最好启用所有警告(/Wall)。然后我看到了大量毫无用处的警告,比如: Warning C4820 '<unnamed-tag>': '3' bytes padding added after data member <unnamed-tag>::Data' DirectX11 Engine c:\program files (x86)\windows kits\8.1\include\um\winnt.h 14

我正在做一个中型项目(一个游戏引擎),我曾经决定最好启用所有警告(
/Wall
)。然后我看到了大量毫无用处的警告,比如:

Warning C4820   '<unnamed-tag>': '3' bytes padding added after data member <unnamed-tag>::Data' DirectX11 Engine    c:\program files (x86)\windows kits\8.1\include\um\winnt.h  14179
为什么有人应该关心4级警告?我认为应该忽略4级警告,因为我会花更多的时间检查它们,而不是跟踪错误。所以
/W3
非常适合我


编辑:当然,在项目结束时,我会使用
/W4
,看看哪些警告可能意味着有用的东西。

是的,不幸的是,VS有很多真正无用的警告。我仍然建议您使用最大级别,然后禁用您不感兴趣的特定警告。你可以从警告中获得好的信息。例如,编译器抱怨的对齐问题可能会降低程序的执行速度。取决于您和您的要求,以确定这是否重要。

一般来说,是的,您应该以尽可能高的警告级别进行编译。尽管有些看似无用,但有些却不会。正是这种调查才是您所寻求的警告的可取方面

当然,您还需要务实地对待这一点,如果代码在警告的情况下仍然有效,那么暂时忽略它们。如果音量太大,我会采取深思熟虑的方法;随着时间的推移,处理警告


一般来说,这些警告非常有启发性,它们会导致代码的改进。当我知道需要忽略警告的约束条件得到满足时(例如dll导出),我也会有选择地关闭警告。

我曾经看到有人在MSVC中维护一个你应该忽略的警告列表,但我想这需要不断的维护以跟上新版本的发展……你在自己的问题中引入了一个很贴切的理由:“许多好的问题都是基于专家经验得出一定程度的意见,但对这个问题的回答往往几乎完全基于意见,而不是事实、参考资料或具体的专业知识。”@πάνταῥεῖ 更改了它。这样更好吗?不,不是真的。仍然基于意见。使用
/W4
,而不是
/Wall
。某些警告在默认情况下是禁用的,并且只有在指定
/Wall
时才启用(如果指定
/W4
,则默认情况下不会启用这些关闭警告)。大多数“无用”“默认情况下,警告处于禁用状态。默认情况下,C4820处于关闭状态。C4359很有用,因为它警告您在源代码中指定了编译器忽略的内容。C4100很有用,因为它警告您在源代码中命名了一些您没有使用的东西(可能是偶然的)。谢谢。大多数警告为C4244(可能丢失数据)。我并不是不知道从“double”到“float”会导致数据丢失。这是我应该禁用的警告的一个例子,那么?Windows、DirectX和Bullet标头中还有许多警告,因此我是否应该禁用这些标头的所有警告,然后再次启用它们?@LHLaurini C4244应视为严重警告,绝对不应禁用。意外变窄是导致安全漏洞的常见原因。有关此类关键缺陷的最新示例,请参见(如果代码是用Visual C++编译的,则将发布C4244)。
Warning C4359   'btContactConstraint': Alignment specifier is less than actual alignment (128), and will be ignored.    BulletDynamics  c:\bullet3-2.83.5\src\bulletdynamics\constraintsolver\btContactConstraint.h 25
Warning C4100   'FirstObject': unreferenced formal parameter    DirectX11 Engine    b:\game engine\directx11 engine\directx11 engine\character.cpp  240