C和C ++的静态分析工具PC-lint Plus v1.3更新内容:总体改进(下)

PC-lint Plus是一种静态分析工具,通过分析C和C ++源代码来发现软件中的缺陷。与编译器一样,PC-lint Plus会解析源代码文件,执行语义分析,并构建一个抽象语法树来表示程序。PC-lint Plus采用各种机制,包括数据流分析,数值跟踪,读写分析,强类型检查,功能语义验证和许多其他技术,来提供对单个文件和整个项目强大而全面的分析。

PC-lint Plus最新版


总体改进的内容:

  • PCLP-2846 扩展了 告消息464的情况

    现在,在许多情况下,包括在对memcpy、strcpy、strncpy、strcat、strncat、wcstombs和strxfrm的调用中,都可以识别出由消息464诊断出的不适当的缓冲区参数重叠(调用函数重叠中的缓冲区参数)。

  • PCLP-2848 禁止复制普通的小型字体1746

    如果参数类型是普通复制类型,其大小小于-size选项的c标志指定的最小大小,则不再发出消息1746(函数的参数可以是const引用)。此最小值的默认值为0,表示不发生基于大小的抑制。禁止显示消息的普通复制类型,例如8个字节或更少的字节,可以使用-size(c,9)选项(仅对9字节或更大的普通可复制类型发出该消息)。

  • PCLP-2868 警告默认构造函数在其类之外的默认值

    当将构造函数定义为类之外的默认构造函数时,它将变为“用户定义”,并且类成员将被默认初始化,而不是零初始化(就像在类中默认构造函数一样)。当默认构造函数在其类之外被默认设置时,将发出新的警告消息1422。例如:

struct bar {bar();int b;};bar::bar() = default;

将发出:

warning 1422: default constructor ’bar::bar(void)’ defaultedoutside of classbar::bar() = default;^
  • PCLP-2875 从消息1784中免除好友声明

    消息1784(以前声明为“C”的符 )现在将忽略好友声明,因为它们不能使用链接规范声明。

  • PCLP-2886 改进了对1556和1764的“新”表达式的分析

    现在,将指向非const的指针作为操作符new的放置形式的放置参数传递,将防止消息提示可以将其作为指向const的指针。当由操作符new分配的对象被列表初始化时,将不再 告消息1556。

  • PCLP-2889 改进了对旧版本Visual Studio的“pclp_config”支持

    pclp_config现在可以为64位版本的Visual Studio 2012、2010、2008和2005生成编译器配置。此外,增强了对32位版本的Visual Studio 2010、2008和2005的支持。

  • PCLP-2896 MISRA配置文件中的版本检查

    MISRA配置文件现在包括一个版本检查,默认情况下,与较旧或较新版本的PC-lint Plus一起使用时,该检查将发出错误。新版本的PC-lint Plus不仅通过更新PC-lint Plus二进制文件本身,而且通过更新MISRA配置文件来改善MISRA支持。可以将环境变量PCLP_NO_LNT_VERSION_CHECK定义为值1以禁用此检查。因为此检查存在于配置文件本身中,所以在PC-lint Plus 1.3中使用较旧的配置文件时不会发出任何错误,但是由于消息映射已更新,因此鼓励进行更新。如果您过去曾经对MISRA配置文件进行过更改,请确保在更新到新版本时不要无意间删除它们。

  • PCLP-2906 在不使用-save的情况下使用-restore时进行诊断

    现在,在没有相应的-save选项的上下文中使用-restore会引发错误72。

  • PCLP-2927 将隐式分配上下文消息扩展到类中的非静态数据成员初始化程序

    现在将类内非静态数据成员初始化程序视为隐式赋值上下文,并接受由上下文参数化的消息。

  • PCLP-2928 对GCC和clang编译器支持-isystem。

    使用pclp_config生成GCC或clang配置时,现在将-isystem编译器选项与-i相同。

  • PCLP-3009 处理警告级别的多项改进。

    以前,使用-w或-wlib移至更高的警告级别或库警告级别会抑制消息超出转换区域。例如,在-w1 + e900 -w2之后,消息-900被-w2选项禁止。当移动到与PC-lint 9行为相符并提供更直观行为的更高警告级别或库警告级别时,PC-lint Plus将不再抑制消息。现在,使用无效的警告级别(有效的警告级别为0-4)会导致错误72,例如-w5以前是允许的,但是现在将导致错误。该文档已更新,其中包含过渡区的精确定义以及-w和-wlib选项如何使用此概念。

  • PCLP-2940 默认情况下,忽略消息527在交换结束时的单个冗余不可达中断

    消息527现在默认情况下将忽略case或switch语句的默认带标签区域中的单个冗余的无法到达的break语句,以适应以break语句结束所有案例的做法,即使案例无条件地使用return、throw、continue、goto、或不返回的函数。在特定情况下的第一个此类被忽略的break语句之后,仍将 告其他无法访问的代码(包括其他break语句)。

    可以使用选项-fub禁用此异常(恢复以前这样的break语句被 告为不可到达的行为)。

  • PCLP-2942 消息9168不再 告类型不完整的声明

    对于不完整类型的变量声明,将不再发出消息9168(变量的别名名称与先前的声明有所不同)。例如:

//lint +e9168extern int X[];int X[] = { 1, 2, 3 };

以前会导致:

note 9168: variable ’X’ has type alias name difference withprevious declaration (’int []’ vs ’int [2]’)int X[] = { 1, 2, 3 };^supplemental 891: previous declaration is hereextern int X[];^

相关内容推荐:

C和C ++的静态分析工具PC-lint Plus v1.3更新内容:总体改进(上)

C和C ++的静态分析工具PC-lint Plus v1.3更新内容:总体改进(中)


想要购买PC-lint Plus正版授权,或了解更多产品信息请点击“咨询在线客服”

04-850x68.png

标签:

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年11月9日
下一篇 2019年11月9日

相关推荐

发表回复

登录后才能评论