与 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 不同的可能匹配和转换。对于*,虽然它
不知道你想要哪个。”
朱莉娅·劳沃尔
我要匹配
*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 不同的可能匹配和转换。对于*,虽然它 不知道你想要哪个。” 朱莉娅·劳沃尔