我已经戳了一会儿,在任何地方都找不到。我找到了一个显示简单模式的cppcheck规则文件的一个很好的例子;
<?xml version="1.0"?>
<rule version="1">
<pattern>if \( p \) { free \( p \) ; }</pattern>
<message>
<id>redundantCondition</id>
<severity>style</severity>
<summary>Redundant condition. It is valid to free a NULL pointer.</summary>
</message>
</rule>
只要所有指针都命名为'p'并且调用是'free',那么它的效果很好。如何更改“p”以匹配任何标识符?如何检查“'免费'或'删除'”?模式是grep / awk / sed模式吗?
答案 0 :(得分:3)
我是Cppcheck开发人员。
Cppcheck使用PCRE。因此,请使用遵循Perl规则的正则表达式。
我不太擅长Perl正则表达式,所以我无法回答如何匹配任何标识符(因为它应匹配两次)。
..希望至少有所帮助。
答案 1 :(得分:0)
从我的正则表达式经验来看,我试试这个
<?xml version="1.0"?>
<rule version="1">
<pattern>if \( (\w+) \) { free \( \1 \) ; }</pattern>
<message>
<id>redundantCondition</id>
<severity>style</severity>
<summary>Redundant condition. It is valid to free a NULL pointer.</summary>
</message>
</rule>
这些PCRE功能取代原始示例的p
:
(\w)
是一个字组模式(字母数字字符和'_'
),在第1组中被捕获\1
是与模式详细描述可以在Martin Moene的博客中找到:Find code patterns with CppCheck
答案 2 :(得分:0)
将p更改为点(。),以便它表示任何字符