在C源代码中搜索和替换,无需触及注释

时间:2011-07-19 16:19:43

标签: c regex search

我有很多c代码,我想用新的样式替换旧的语法风格。例如。以下前缀“si”:

int siName;

应该变成“我”:

int iName;

但是reg-expression或其他查找/替换工具,不应该触及任何源代码注释。 任何解决方案?

4 个答案:

答案 0 :(得分:2)

您可以尝试coccinelle。它有一点学习曲线,但它解析C代码并执行脚本中给出的转换。例如,要将函数从foo重命名为bar,脚本将如下所示(来自here):

@@

@@

-foo()
+bar()

它也可以根据正则表达式重命名变量,但我还没有找到方法。

答案 1 :(得分:1)

在vi中使用

       :%s/\<Oldword\>/Newword/gc

这会询问您是否要替换您可能乐于忽视的整个单词的特定事件,如果它是评论的一部分。

答案 2 :(得分:0)

关于Coccinelle的建议,您可以使用以下表示法使用正则表达式进行匹配:

identifier foo =~ "xxx";

也就是说,foo将匹配包含xxx的任何标识符。支持PCRE正则表达式。

您还可以使用python创建新标识符:

@a@
identifier x;
@@

foo(x)

@script:python b@
x << a.x;
xx;
@@

coccinelle.xx = "%s%s" % (x,x)

@@
identifier a.x;
identifier b.xx;
@@

 foo(
-  x
+  xx
   )

对于该计划:

int main () {
  foo(one);
}

这给出了

int main () {
  foo(oneone);
}

答案 3 :(得分:-1)

为什么不搜索替换“int si” - &gt; “int i”?如果您遵循某种命名约定(希望不是匈牙利语符号),那么冲突应该是最小的。

相关问题