如何从 Visual Studio C 编译器获得更有用的警告?

How to get more useful warnings from Visual Studio C compiler?

我正在使用 Visual Studio 2015 C 编译器,我发现它缺少警告。
例如,此代码在没有警告或错误的情况下编译(使用 -Wall 选项):

#include<stdlib.h>

int main(void)
{
    int i = 2;

    free(&i);
// The compiler should tell me "You are trying to free something not on the heap".

    return 0;
}

有很多导致崩溃的原因 or/and -W4-Wall 未检测到的未定义行为, 是否还有其他我可以使用的选项要警告这些错误?
我知道我可以使用其他编译器,但我听说当您针对 Windows 平台时,Visual Studio 附带的编译器更好。

正如您正确指出的那样,使用编译器生成警告并不是对未定义行为的完整检测。

打开优化奇怪地改进了编译器报告。它会发现尚未设置的变量(值跟踪)和一些不需要的值。

要比编译器走得更远,那么coverity and pc-lint等静态分析工具做更强的分析。然而,这些产品也是虚假的,并且会突出一些正确的问题,他们误解了,并且仍然遗漏了一些未定义的行为。

特别是如果你是跨平台编译,我对编译器的warnings的态度会比较宽松(用gcc和VS清理真的很难,而且可能会损坏你的代码),把你的静态分析工具当成代码-审稿人。当它表明失败时,尊重它,但假设它可能误解了代码。

我手头有一份 pc-lint,得到了这个...

--- Module:   file.c (C)
        _
    free(&i);
file.c(7) : Warning 424: Inappropriate deallocation (free) for 'auto' data

---