【问题标题】:Warning C6387 Visual Studio警告 C6387 Visual Studio
【发布时间】:2021-11-07 19:31:31
【问题描述】:

Visual Studio 试图通过这个警告告诉我什么?

根据docs,此警告是在您将潜在的空值传递给参数时。

但在调用这些函数之前,我正在使用 if (hwnd) 检查 null。

if (hwnd) {
    GetClientRect(hwnd, (LPRECT)&rMyRect);
    ClientToScreen(hwnd, (LPPOINT)&rMyRect.left);
    ClientToScreen(hwnd, (LPPOINT)&rMyRect.right);
}

【问题讨论】:

  • 它试图告诉你它太聪明了。
  • 尝试关闭 *.cpp 文件并再次打开它。也许它会让它闭嘴。
  • 如果你可以构造一个minimal reproducible example,你应该file a defect,并让这里的人知道,这样它就会被投票。当报告原生开发者工具中的错误时,微软通常不会在意,除非投票数很高。显然,纳德拉不明白需要真正的代码来支持他的“智能边缘”

标签: c++ visual-studio winapi warnings


【解决方案1】:

作为 IntelliSense 取消定义您要摆脱的内容(不是编译时警告),看起来没有特定选项可以强制 IntelliSense 忽略该警告。您可以从 Visual Studio 窗口的 Tools->Options->Text Editor->C/ 下整体禁用它C++->高级,看右边的“代码分析”部分;在此部分下,将“禁用 C++ 代码分析体验”设置为 True。

Tools->Options->Text Editor->C/C++->*Advanced

【讨论】:

    【解决方案2】:

    您测试它的事实不相关,编译器没有检测到该测试。 但是,您可以使用:

    #pragma warning(suppress : 6387)
    

    在前一行,这将阻止消息(或使用 __Pragma(warning(suppress : 6387)),但我更喜欢#pragma 形式。

    【讨论】:

    • 这将停止在编译时生成警告,但我认为它不会停止“intellisense”警告。
    • 在抑制之前执行 pragma push 并在调用 ClientToScreen 之后执行 pragma pop 会更好吗?
    • #pragma warning(push)/#pragma warning(pop) 仅在与 #pragma warning(disable :) 配对时才有意义,而不是 #pragma warning(suppress :),抑制是一次性的命令,它只适用于下一行。
    猜你喜欢
    • 2021-11-04
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多