什么是cppcheck rule-file <pattern>语法?</pattern>

时间:2012-05-31 15:38:21

标签: regex customization pcre cppcheck

我已经戳了一会儿,在任何地方都找不到。我找到了一个显示简单模式的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模式吗?

3 个答案:

答案 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更改为点(。),以便它表示任何字符