我有一个C源代码文件,其中的注释是以//
(C ++)格式编写的。我想将所有注释更改为旧的/* */
(C)格式。是否有现有脚本可以实现这一功能?
使用您最喜欢的编辑器和类似于s#//(.*)#/*\1 */#
的正则表达式进行替换即可...
x=0; // /* was x=1; */ off-by-one bug corrected
。 - pmgs/foo/bar/
等同于 s#foo#bar#
、sXfooXbarX
和 s,foo,bar,
等。 - Adam Rosenfield:s#//\\(.*\\)#/*\1 */#
。'#'用于分隔搜索和替换(通常使用'/'进行替换,但使用'#'可以替换不需要转义'/'的情况)。 - pmg: % s#//\\(.*\\)$#/*\1*/#
。 - Martin Yorkcmt_cpp_to_c
参数将C++风格的注释转换为C风格的注释。 sed -e 'sX// *\(.*[^ ]\) *$X/* \1 */X' < oldfile > newfile
egrep '//.*/[*]|".*//' oldfile
嗯,1,$s#//\(.*\)#/*\1 */#
只有在您的 C 代码中没有 C++ 风格注释实例(通常是多行)时才有效,因为替换将会过早地结束 C 风格注释,使剩余部分的 C 风格注释没有起始 /*
。
任何具有 */
的常规 C++ 风格注释也会导致问题。这种情况发生在一个糟糕的程序员将 C 风格注释更改为 C++ 风格注释但未删除结尾的 */
的代码中。
不幸的是,大多数脚本只能反向工作。有一个不错的叫做“RECOMMENT”的脚本,但它需要使用C语言并将其转换为更新的C++风格注释。我想你想要这样做的原因是由于使用C++风格注释时出现编译器错误。通常造成这种情况的原因是一行代码同时使用了C风格注释和C++风格注释。也许寻找特定的场景可以消除您将其转换回旧的注释风格的需求。如果不行,那么您可能不得不手动完成它。(我祈祷您不必这样做,因为我知道那会很繁琐!)
/* foo */ bar ++;
如果不改变行号,就无法正确翻译。 - nategooseVim Nerdcommenter alternate delims map
如果你执行:<leader>ca
,某些文件类型具有备用注释样式,特别是对于 C / C++,它允许在//
和/*
之间切换,在2.5.2中经过测试。
然后您可能还对使用<leader>cs
的“性感注释模式”感兴趣,它可以像NERD commenter : How to comment out a range中提到的那样进行漂亮的 C 多行注释。
献给所有程序员!以下解决方案适用于Eclipse、Sublime和其他支持正则表达式的编辑器。
完成!
gcc -ansi
检测到的错误。 - user191776gcc -ansi
将在不久的将来改为支持 C99。如果您确实需要 C89 兼容性,请使用gcc -std=c89 -pedantic
。 - pmg//
注释一直是标准的C语言,并且与int
一样符合ISO标准。(最初的C标准是1989年的ANSI标准。据我所知,C++和C99标准仅限于ISO标准。) - David Thornley