【发布时间】:2013-07-10 09:43:37
【问题描述】:
我有一个类似sn-p int t.c的代码
val = (val1 << 8) | (val >> 8 );
val = (val2 << 16) | (val >> 8 );
val = (val3 << 32) | (val >> 8 );
val = (val << 8);
如果我 grep 为 grep -nhE "(<<.*|).*(>>)" t.c,我会得到输出
1:val = (val1 << 8) | (val >> 8 );
2:val = (val2 << 16) | (val >> 8 );
3:val = (val3 << 32) | (val >> 8 );
但是如果用 cppcheck 搜索 ./cppcheck --rule="(<<.*|).*(>>)" t.c 我会得到输出
[../test/t.c:1]: (style) found ' val = ( val1 << 8 ) | ( val >> 8 ) ; val = ( val2 << 16 ) | ( val >> 8 ) ; val = ( val3 << 32 ) | ( val >>'
即显示从第一次匹配开始的整个匹配行。我想要 grep 命令中的结果。
请帮忙
【问题讨论】:
-
您的规则过于复杂。由于交替运算符
|,您只能有效地搜索>>。将更简单的表达式与与 vs 兼容的输出相结合,使用./cppcheck --template=vs --rule=">>" t.c。您可以定义自己的模板来格式化输出,请参阅chapter 5 of the manual。