c++ - Clang:将特定警告标记为非错误

标签 c++ clang compiler-warnings

我正在尝试将所有警告标记为错误以防止新警告悄悄出现,但我想保持现有代码库正常工作,因此我将其中一些标记为非错误 -Wno-error=foo。问题是一些警告仍然被报告为错误而不是警告,即使它们已被标记为无错误:

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -c -Xclang -include-pch -Xclang Pch/UI-ProjectScreen/c++.pch -pipe -stdlib=libc++ -Wall -Wextra -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wheader-hygiene -Wmissing-declarations -Wunreachable-code -Wuninitialized -Woverloaded-virtual -Werror -Wno-error=deprecated-declarations -Wno-error=logical-op-parentheses -Wno-error=missing-field-initializers -Wno-error=non-virtual-dtor -Wno-error=pedantic -Wno-error=reorder -Wno-error=return-stack-address -Wno-error=sign-compare -Wno-error=switch -Wno-error=unreachable-code -Wno-error=unused-const-variable -Wno-error=unused-parameter -Wno-error=unused-private-field -Wno-error=unused-variable -Wno-error=#warnings -Wno-deprecated-register -Wno-extra-semi -Wno-backslash-newline-escape -Wno-missing-braces -isystem /Developer/Boost/1.57.0-Clang/include -isystem /Developer/Qt5.6.1-clang/5.6/clang_64/include -g -fPIC -std=gnu++1y -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -mmacosx-version-min=10.8 -W -D_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_XML_LIB -DQT_XMLPATTERNS_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I../../../../Modules/UI/ProjectScreen -I. -I/Developer/Boost/1.57.0-Clang/include -I../../../../ThirdParties/Glew/1.13.0/include -I../../../../ThirdParties/TBB/include -I/Developer/Qt5.6.1-clang/5.6/clang_64/lib/QtWidgets.framework/Headers -I/Developer/Qt5.6.1-clang/5.6/clang_64/lib/QtGui.framework/Headers -I/Developer/Qt5.6.1-clang/5.6/clang_64/lib/QtXml.framework/Headers -I/Developer/Qt5.6.1-clang/5.6/clang_64/lib/QtXmlPatterns.framework/Headers -I/Developer/Qt5.6.1-clang/5.6/clang_64/lib/QtNetwork.framework/Headers -I/Developer/Qt5.6.1-clang/5.6/clang_64/lib/QtCore.framework/Headers -IMoc -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/OpenGL.framework/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/AGL.framework/Headers -IUi -I/Developer/Qt5.6.1-clang/5.6/clang_64/mkspecs/macx-clang -F/Developer/Qt5.6.1-clang/5.6/clang_64/lib -o Obj/ProjectScreenWidget.o ../../../../Modules/UI/ProjectScreen/ProjectScreenWidget.cpp
../../../../Modules/UI/ProjectScreen/ProjectScreenWidget.cpp:597:9: error: missing field 'duration' initializer [-Werror,-Wmissing-field-initializers]
        }; 
        ^
1 error generated.
make: *** [Obj/ProjectScreenWidget.o] Error 1
12:09:36: The process "/usr/bin/make" exited with code 2.

如您所见,我传递了 -Werror 以及 -Wno-error=missing-field-initializers 那么为什么 上的编译错误>缺少字段初始化器?我当然可以修复警告,但我想先了解发生了什么。

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ --version
Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin13.4.0
Thread model: posix

我是否遗漏了一些明显的东西?

编辑:我刚试过 http://gcc.godbolt.org/#它似乎按预期运行,我无法在那里重现相同的问题...

最佳答案

我终于找到了问题所在:我正在使用 qmake 生成 makefile,它会在我的设置后自动添加 -W,这实际上忽略了我所有的警告选项先前设置。

所以我更改了 QMAKE_CXXFLAGS_WARN_ON 变量以删除 -W 选项并修复了它。

QMAKE_CFLAGS_WARN_ON -= -Wall -W
QMAKE_CXXFLAGS_WARN_ON -= -Wall -W

我也可以编辑 makespec 文件,但我认为这个解决方案更清晰并且更能抵抗用户错误(即当(重新)安装 Qt 等时)。

关于c++ - Clang:将特定警告标记为非错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38267384/

相关文章:

c++ - 检查基类指针类型的最佳方法是什么?

clang 添加一个新的 pragma

clang - C++ 11 代码使用 `clang++` 编译,但不使用 `clang -x c++`

Java:通用强制转换会产生警告,为什么?

msbuild - VS2013 - MSB3270 : Mismatch between the processor architecture - Fakes Framework

c++ - 为什么调用了不合适的重载函数?

c++ - 标准 C++11 是否保证 `volatile atomic<T>` 具有两种语义( volatile + 原子)?

c++ - 如何在对象的生命周期内保持 Boost upgradable_lock?

c++ - 如何隐藏 C++ RTTI 符号?

c++ - "Recursive on All Control Paths"执行阶乘函数时出错