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[];^
-
PCLP-2960 消息1932不再对前向声明或模板实例化发出
对于类的前向声明或在模板实例化中,将不再 告消息1932(类从非抽象类继承)。
-
PCLP-2962 减少内存使用
内存使用已大大减少,特别是对于涉及许多模块的项目。
-
PCLP-2977 消息1915的多项改进
消息1915(虚拟函数覆盖函数,并且未标记为“覆盖”)不再在C ++ 03模式下发出,不再针对类外定义发出,并且发出了更具描述性的补充消息。
-
PCLP-2984 使用许多-append和-deprecate选项或MISRA配置文件时,性能得到改善,并且减少了内存使用。这也适用于使用许多此类选项的MISRA配置文件。
-
PCLP-2988 性能提升
在适用于一般用途的许多不同领域中,性能都有所提高。
PCLP-3002 将默认的C ++标准从C ++ 14(-std = c ++ 14)更新到C ++ 17(-std = c ++ 17)
现在默认的C ++语言标准是C ++ 17(-std = c ++ 17)。以前是C ++ 14(-std = c ++ 14)。可以使用选项-std = c ++ 14将C ++语言标准恢复为先前的默认值。请注意,C ++ 17中删除了一些先前不推荐使用的语言功能。如果您使用的是在C ++ 17中删除的功能,以前未使用-std选项指定显式语言版本,并且在更新后收到错误或警告,则可以使用选项-std = c ++恢复以前的行为。 14。
-
PCLP-3014 发行1774,用于通过相等运算符进行比较
消息1774(仅dynamic_cast可以通过返回null来指示失败)以前仅在通过布尔转换对非动态指针对指针强制转换的结果进行了null测试(例如,如果(static_cast (p ))…)。现在,当使用相等运算符将其与空指针常量进行比较时,也会发出该消息。如果(static_cast
(p1)== nullptr)….
C和C ++的静态分析工具PC-lint Plus v1.3更新内容:总体改进(上)
C和C ++的静态分析工具PC-lint Plus v1.3更新内容:总体改进(中)
想要购买PC-lint Plus正版授权,或了解更多产品信息请点击“咨询在线客服”

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