警告 C6387 Visual Studio

Warning C6387 Visual Studio

提问人: 提问时间:9/12/2021 最后编辑:Remy Lebeau 更新时间:8/21/2023 访问量:6472

问:

这个警告想告诉我什么?Visual Studio

Warning

根据文档,当您将潜在的 null 值传递给参数时,会出现此警告。

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

if (hwnd) {
    GetClientRect(hwnd, (LPRECT)&rMyRect);
    ClientToScreen(hwnd, (LPPOINT)&rMyRect.left);
    ClientToScreen(hwnd, (LPPOINT)&rMyRect.right);
}
C++ Visual-Studio WinAPI 警告

评论

4赞 Jonathan Potter 9/12/2021
它试图告诉你,它太聪明了,不利于它自己。
1赞 Barmak Shemirani 9/12/2021
尝试关闭 *.cpp 文件,然后再次打开它。也许它会让它闭嘴。
2赞 IInspectable 9/12/2021
如果你能构建一个最小的可重现示例,你应该提交一个缺陷,并让这里的人知道,以便它被点赞。在报告本机开发人员工具中的错误时,Microsoft 通常不会关心,除非投票数很高。显然,纳德拉不明白,为他的“智能边缘”提供动力需要真正的代码。

答:

2赞 SoronelHaetir 9/12/2021 #1

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

#pragma warning(suppress : 6387)

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

评论

2赞 Jonathan Potter 9/12/2021
这将阻止在编译时生成警告,但我认为它不会阻止“intellisense”警告。
0赞 rturrado 9/12/2021
在抑制之前进行编译指示推送,在调用 之后进行编译指示弹出会更好吗?ClientToScreen
0赞 SoronelHaetir 9/12/2021
#pragma warning(push)/#pragma warning(pop) 仅在 #pragma 与 warning(disable :) 配对时才有意义,而不是 #pragma warning(suppress : ),suppress 是一次性命令,它仅适用于下一行。
1赞 user745535 10/29/2021 #2

作为 IntelliSense 取消划线你尝试删除的内容(而不是编译时警告),看起来没有特定的选项来强制 IntelliSense 忽略该警告。您可以从 Visual Studio 窗口中整体禁用它,在 Tools->Options->Text Editor->C/C++->Advanced 下,查看右侧的“代码分析”部分;在此部分下,将“禁用 C++ 代码分析体验”设置为 True。

工具->选项->文本编辑器->C/C++->*高级

评论

0赞 ScienceDiscoverer 7/23/2023
但我不想禁用所有警告,只禁用这个警告!
1赞 Ben Weston 8/14/2022 #3

这就是我仅对受影响代码块禁用警告 6387 的方式;

#pragma warning( push )
#pragma warning( disable : 6387)
    GetClientRect(hwnd, (LPRECT)&rMyRect);
    ClientToScreen(hwnd, (LPPOINT)&rMyRect.left);
    ClientToScreen(hwnd, (LPPOINT)&rMyRect.right);
#pragma warning( pop )

感谢 ScienceDiscoverer 指出我的错误,并且 NULL 实际上被定义为 0。

评论

0赞 ScienceDiscoverer 7/23/2023
否,是否将 din Windows API 定义为 0。 是一头不同的野兽,是的。NULLnullptr