警告-未引用的内联函数已被删除
Warning - Unreferenced inline function has been removed
我开始学习C++,并了解到提高警告级别是一个在编写代码时更加小心的好主意。我正在使用Visual Studio 2015(社区版)
然而,在这样做之后,即使在基本程序中,我也会收到数百个错误(编辑:警告被视为错误,抱歉)。这些都来自数学头,它们说"未引用的内联函数已被删除"。似乎我没有使用的每一种方法都会引起警告。
为什么会发生这种情况,我该如何解决?
使用Visual C++时,应该使用/W4
,而不是/Wall
,这是不切实际的。如果警告级别4仍然产生sillywarnings,例如从标准标头,那么考虑使用我的旧MSVC"no sillywarings"标头或它的适当扩展。最好是通过强制包含编译器选项。
为了在命令行中使用Visual C++,我通常使用以下环境变量:
CL=/nologo/EHsc/GR/W4/FI"iso646.h">
显然,现在可以自动抑制来自系统标头的警告,所以这不是问题。
请注意,虽然神圣的C++标准没有区分不同类型的诊断,但作为事实上的标准C++编译器和链接器,之间存在差异
-
错误:
错误诊断意味着没有生成可执行文件(或对象文件)。 -
警告:
警告诊断意味着可能出了问题,或者至少有点可疑,但编译器、链接器或其他工具会在您知道自己在做什么的情况下继续执行。
可以强制包含的特定于MSVC的相关标头(选项/FI
),包括最新版本的无门槛警告标头:
#pragma once
// p/cppx/core_language_support/compiler_specific/msvc_less_errors_as_warnings_please.hpp
// Copyright © Alf P. Steinbach 2015. Boost Software License 1.0.
#ifndef _MSC_VER
# error This file is specific to the MSVC (Microsoft Visual C++) compiler.
#endif
#pragma warning( error: 4566 ) // Character ... cannot be represented -- is error.
#pragma warning( error: 4627 ) // Source code has been ignored – is error.
msvc_more_warnings_please.hpp#pragma once
// p/cppx/core_language_support/compiler_specific/msvc_more_warnings_please.hpp
// Copyright © Alf P. Steinbach 2015. Boost Software License 1.0.
#ifndef _MSC_VER
# error This file is specific to the MSVC (Microsoft Visual C++) compiler.
#endif
#pragma warning( push, 4 ) // Warning level 4 (max). MSVC /Wall is impractical.
msvc_no_sillywarnings_lease.hpp#pragma once
// p/cppx/core_language_support/compiler_specific/msvc_no_sillywarnings_please.hpp
// Copyright © Alf P. Steinbach 2010 – 2015. Boost Software License 1.0.
#ifndef _MSC_VER
# error This file is specific to the MSVC (Microsoft Visual C++) compiler.
#endif
#ifndef CPPX_ALLOW_WP64
# // The /Wp64 option generates spurious warnings when a __w64 type argument selects
# // a correct overload with non-__w64 formal argument type, i.e. for <<. In newer
# // versions of MSVC this option is deprecated. It Really Annoyed a lot of people!
# ifdef _Wp64
# error Do not use the /Wp64 option: use a 64-bit compiler to detect 64-bit portability issues.
# endif
#endif
// The following are real warnings but are generated by almost all MS headers, including
// standard library headers, so it's impractical to leave them on.
#pragma warning( disable: 4619 ) // there is no warning number 'XXXX'
#pragma warning( disable: 4668 ) // XXX is not defined as a preprocessor macro
// The following are pure sillywarnings:
#pragma warning( disable: 4061 ) // enum value is not *explicitly* handled in switch
#pragma warning( disable: 4063 ) // case 'nn' is not a valid value for switch of enum 'Name'
#pragma warning( disable: 4099 ) // first seen using 'struct' now seen using 'class'
#pragma warning( disable: 4127 ) // conditional expression is constant
#pragma warning( disable: 4180 ) // qualifier applied to function type has no meaning
#pragma warning( disable: 4217 ) // member template isn't copy constructor
#pragma warning( disable: 4250 ) // inherits (implements) some member via dominance
#pragma warning( disable: 4251 ) // needs to have dll-interface to be used by clients
#pragma warning( disable: 4275 ) // exported class derived from non-exported class
#pragma warning( disable: 4347 ) // "behavior change", function called instead of template
#pragma warning( disable: 4355 ) // "'this': used in member initializer list
#pragma warning( disable: 4373 ) // override when arg types differ by const/volatile qualifiers
#pragma warning( disable: 4428 ) // MSVC 9: universal-character-name encountered in source
#pragma warning( disable: 4459 ) // local declaration hides global declaration
#pragma warning( disable: 4505 ) // unreferenced function has been removed
#pragma warning( disable: 4510 ) // default constructor could not be generated
#pragma warning( disable: 4511 ) // copy constructor could not be generated
#pragma warning( disable: 4512 ) // assignment operator could not be generated
#pragma warning( disable: 4513 ) // destructor could not be generated
#pragma warning( disable: 4610 ) // can never be instantiated user defined constructor required
#pragma warning( disable: 4623 ) // default constructor could not be generated
#pragma warning( disable: 4624 ) // destructor could not be generated
#pragma warning( disable: 4625 ) // copy constructor could not be generated
#pragma warning( disable: 4626 ) // assignment operator could not be generated
#pragma warning( disable: 4640 ) // a local static object is not thread-safe
#pragma warning( disable: 4646 ) // noreturn function should have a void return type
#pragma warning( disable: 4661 ) // a member of the template class is not defined.
#pragma warning( disable: 4670 ) // a base class of an exception class is inaccessible for catch
#pragma warning( disable: 4672 ) // a base class of an exception class is ambiguous for catch
#pragma warning( disable: 4673 ) // a base class of an exception class is inaccessible for catch
#pragma warning( disable: 4675 ) // resolved overload was found by argument-dependent lookup
#pragma warning( disable: 4702 ) // unreachable code, e.g. in <list> header.
#pragma warning( disable: 4710 ) // call was not inlined
#pragma warning( disable: 4711 ) // call was inlined
#pragma warning( disable: 4820 ) // some padding was added
#pragma warning( disable: 4917 ) // a GUID can only be associated with a class, interface or namespace
#pragma warning( disable: 4996 ) // MSVC 9: a C stdlib function has been "deprecated" (says MS)
相关文章:
- 如何通过 getter 函数删除矢量的元素?
- C++类析构函数删除成员(如果"owner"?
- 使用私有析构函数删除动态分配的对象
- C ++(为什么)确实移动构造函数删除运算符=
- 析构函数删除错误的元素
- C++ 类析构函数删除部分但不是全部成员数据
- 如何使用 deleteEntry 函数 c++ 删除数组中的单个字符串
- 仅仅以避免隐式复制构造函数删除,使用shared_ptr而不是unique_ptr作为类成员明智
- 析构函数删除在 main 中声明的动态数组
- 如果未分配申报表,是否需要删除或处理动态数组?还是它被函数删除
- C++ 函数删除一行
- g++空函数删除是否递归工作
- C++析构函数删除东西(对象,指针?)太快
- C++析构函数删除包含动态数组作为数据成员的对象时的用法
- C++11 析构函数 = 删除
- 父类析构函数删除具有外部启动元素的子类
- 函数删除太多
- C++析构函数删除共享内存
- C++,如何让此函数删除存储在数组中的字符串
- 析构函数删除数组时出错