为什么禁用在Visual Studio中无效的特定警告

时间:2013-12-05 14:34:18

标签: visual-studio qt visual-c++ qmake suppress-warnings

使用Visual Studio C ++ 2013,我有很多警告C4100:未引用的形式参数,我想禁用它。我在项目的“禁用特定警告”中为调试|发布配置添加了4100,但不幸的是VS仍然输出警告。

我正在使用VS2008,并且禁用特定警告正在运行,但现在使用VS2013,它没有。我做错了什么?

编辑:

编译器命令行:

/GS /analyze- /W3 /wd"4100" /Zc:wchar_t /I [...] /Zi /Gm- /Od /Fd".\" /fp:precise /D "_WIN32_WINNT=0x0601" /D "_CRT_SECURE_NO_WARNINGS" /D [...] /errorReport:prompt /WX- /Zc:forScope /GR /Gd /Oy- /MDd /Fa"debug\" /EHsc /nologo /Fo"debug\" /Fp"debug\project1.pch"

附加选项:

-Zm200 -w34100 -w34189 /MP

2 个答案:

答案 0 :(得分:18)

这让我疯了一会儿。我的问题是Qt的win32-msvc2013的默认qmake.conf(在qtdir \ mkspecs下看)包含以下行: QMAKE_CXXFLAGS_WARN_ON = $$ QMAKE_CFLAGS_WARN_ON -w34100 -w34189

您没有说您使用的是Qt,但-w34100参数设置警告4100在W3级而不是W4级别。这将优先于-wd4100,因此您仍会看到警告。对于我们这些使用qt的人,您可以将QMAKE_CXXFLAGS_WARN_ON - = -w34100添加到您的.pro文件中,或删除mkspecs文件夹中的参数。

答案 1 :(得分:1)

回想起来,这似乎很明显,但是我不得不重新阅读原始内容?和user1661176的答案都经过仔细研究,并进行了一些研究,才能意识到我必须在我的“ .pro”文件中同时使用以下两项功能:

QMAKE_CXXFLAGS_WARN_ON -= -w34100
QMAKE_CXXFLAGS += -wd4100

给出此答案只是为了让其他人找到它?无需进行其他研究即可迅速获得答案。

在我看来,这样做的原因显而易见。我喜欢将参数名称保留在通过在Qt Creator中选择“转到插槽”而创建的函数中,这样即使不使用它们,也可以通过查看参数来暗示它们的作用。以防万一我决定以后再使用。我也不喜欢例如将参数名称包装在例如const QDate* UNUSED(date)通过使函数看起来混乱而阻碍了可读性。

如果您也遵循抑制这些警告的方法,建议您不时重新打开它们并检查这些警告,以防万一您可以在自己的函数中删除一些不需要的参数,或者可以使用您自己的参数。不会使用,但应该使用您的函数声明/实现。

(这是针对Qt的,这是由OP的qmake标签规范所表明的。)

编辑: 使用最新的Qt Creator版本4.7.1,可以得到一连串的警告,包括未使用的参数。毫无疑问,不适合Qt的是在释放模式下发生qDebug() << "some text;的情况下,“代码将永远不会执行”。并且还标记了大多数(?)隐式转换。无法禁用它的单个警告类型。但是,可以通过转到“问题”窗格标题右侧的小工具栏来禁用所有这些工具。最右边的一个是漏斗。单击它,您可以通过取消选中“ Clang Code Model”来禁用Clang警告。不要误会我的意思-这些警告可以指出重要的问题;因此我可以让他们浏览它们,但是我的大多数情况都是微不足道的,恕我直言(例如,与不重写代码以使用新的语言功能有关)。解决了我认为很重要的问题后,请再次禁用它们。

我还注意到上面的行不再起作用。但是,请执行以下操作:

QMAKE_CXXFLAGS_WARN_ON -= -w34100
QMAKE_CXXFLAGS_WARN_OFF += -wd4100

您可能也可能不需要在带有最新版本Qt的Visual Studio中进行此更改。

相关问题