我正在制作一个中型项目(游戏引擎),我曾经认为启用所有警告(/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
然后我决定使用/W4
。仍然有很多无用的警告,即使其中一些实际上可以帮助我跟踪错误。一些例子:
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
为什么有人会关心4级游戏?我认为4级警告应该被忽略,因为我会花更多时间检查它们,而不是花在跟踪bug上。所以/W3
对我来说是完美的。
编辑:当然,在项目结束时,我会使用/W4
并查看哪些警告可能意味着有用的东西。
答案 0 :(得分:1)
是的,不幸的是VS有很多无用的警告。我仍然建议您使用最高级别,然后禁用您不感兴趣的特定警告。您可以从警告中获取良好的信息。例如,编译器抱怨的对齐问题会降低程序的执行速度。由你和你的要求决定是否重要。
答案 1 :(得分:1)
一般情况下,您应该尽可能高地编译警告。即使有些可能看起来毫无用处,有些也不会。正是您正在寻找的警告的理想方面。
当然,你还需要务实,如果代码仍然有效,尽管有警告,暂时忽略它们。如果音量太大,我会采取考虑的方法;随着时间的推移完成警告。
一般来说,警告非常有启发性,它们会导致代码的改进。当我知道忽略忽略它所需的约束时,我也会有选择地关闭警告(例如dll export)。