C/C++ 代码分析概述

更新:2007 年 11 月

C/C++ 代码分析工具为开发人员提供了有关他们的 C/C++ 源代码中可能存在的缺陷的信息。工具报告的常见编码错误包括缓冲区溢出、内存未初始化、null 指针取消引用以及内存和资源泄漏。

IDE(集成开发环境)集成

分析工具与 IDE 完全集成,以方便开发人员使用。在生成过程中,针对源代码生成的任何警告都显示在“错误列表”中。这些警告包括缺陷路径信息(如果有);双击警告会突出显示指向警告的缺陷路径。

#pragma 支持

开发人员可以使用 #pragma 指令将警告作为错误处理;还可以启用或禁用警告,如下面的示例所示:

#pragma warning (error: 6260)

#pragma warning (disable: 6011)

#pragma warning (enable: 6056)

批注支持

批注可以提高代码分析的准确性。批注可提供有关函数参数及返回类型的 pre(前置)条件和 post(后置)条件的其他信息。

#include <CodeAnalysis/SourceAnnotations.h>

[returnvalue:Post( MustCheck=SA_Yes )] double* CalcSquareRoot

(

    [Pre( Null=SA_No )] double* source,

    unsigned int size

);

在上面的示例中:

[Post ( MustCheck=SA_Yes)] 要求调用方检查 CalcSquareRoot 的返回值

[Pre ( Null=SA_No)] 要求调用方将非 null 参数“source”传递给 CalcSquareRoot

作为签入策略的一部分运行分析工具

作为一个单位,可能希望所有签入行为满足特定的策略。特别是希望确保遵从下列策略:

  1. 要签入的代码中没有生成错误。

  2. 在最近一次生成中运行了代码分析。

可以通过指定签入策略来实现该任务。

Team System 与 Team Build 的集成

您可以使用生成系统的集成功能在生成过程中运行分析工具。有关更多信息,请参见 Team Foundation Build 概述

命令行支持

分析工具是与开发环境完全集成的,此外,开发人员还可以从命令行使用分析工具,如下面的示例所示:

C:\>cl /analyze Sample.cpp