与 coccinelle 匹配 *ptr = value

Matching *ptr = value with coccinelle

我要匹配

*ptr=value;

在 C 代码中,然后用

替换它
CHECK_PTR(ptr)
*ptr=value;

CHECK_PTR() 是一个检查 ptr 是否不为空的宏

我写了一个 Coccinelle 脚本来完成这项工作

@rule1@
type T;
T* ptr;
expression E;
@@
-\*ptr=E;
+CHECK_PTR(ptr)
+*ptr=E;

但这行不通,因为星号运算符。 在这里我使用反斜杠来转义 * 但是这没有给出任何结果

你能帮帮我吗

几天前我遇到了同样的问题,这就是你的问题的答案

“第 0 列与其他列不同。只需在您的 * 前面输入 space 一切都会好起来的。

这个问题通常出现在括号中。例如,如果你想 为函数添加一个新的最后一个参数,你可能会说:

f(27
+ , 145
)

在这种情况下,Coccinelle 可以检测到潜在的问题并将 抱怨。因为第 0 列中的 ( | 和 ) 用于析取(集合 oo 不同的可能匹配和转换。对于*,虽然它 不知道你想要哪个。” 朱莉娅·劳沃尔