什么是Win编译开关关闭#pragma弃用警告?

T.T*_*.T. 2 c++ windows compiler-construction winapi mfc

使用Visual Studio .NET 2003 C++和wininet.dll看到许多C4995警告

更多信息

任何帮助表示赞赏.

谢谢.

Sco*_*ith 11

除了上面的答案之外,值得一提的是,在有限范围内禁用警告通常是一种好习惯(如果您将这些编译指示放在头文件中,这一点尤其重要):

#pragma warning (disable : 4121) // alignment of a member was sensitive to packing

#include <third-party-header.h>

#pragma warning (default : 4121) // Restore default handling of warning
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用推/弹机制.如果您需要在第三方头文件中禁用一堆警告,这可能很方便:

#pragma warning(push)
#pragma warning(disable: 4018)  // signed/unsigned mismatch
#pragma warning(disable: 4100)  // unreferenced formal parameter
#pragma warning(disable: 4512)  // 'class' : assignment operator could not be generated
#pragma warning(disable: 4710)  // 'function' : function not inlined
#pragma warning(disable: 4503)  // decorated name length exceeded, name was truncated

#include <third-party-header1.h>
#include <third-party-header2.h>
#include <third-party-header3.h>
#include <third-party-header4.h>

#pragma warning(pop)
Run Code Online (Sandbox Code Playgroud)

  • 请注意,您还可以在一个预处理器指令中禁用多个警告:`#pragma warning(disable:4018 4100)`.话虽如此,我真的很喜欢你如何解释它旁边的每个警告的禁用原因. (3认同)

Jam*_*lis 6

您可以使用#pragma warning该MSDN页面上显示的内容:

#pragma warning(disable: 4995)
Run Code Online (Sandbox Code Playgroud)

或者,你可以把警告关闭项目的属性整个项目(右键单击项目- >属性- > C/C++ - >高级- >禁用特定的警告).在命令行中,您可以使用相同的效果/wd4995.

  • @Tommy:编译器获得两个输入:一组命令行参数和源文件.如果你想告诉它做某事,你必须在这两个地方中的一个地方这样做. (2认同)