我有一个C源文件,其中包含//
(C ++)样式的注释。我想将所有注释更改为旧的/* */
(C)样式。有没有办法使用现有脚本执行此操作?
答案 0 :(得分:14)
用你最喜欢的编辑器替换和像s#//(.*)#/*\1 */#
这样的正则表达式应该这样做......
答案 1 :(得分:4)
如果您正在寻找更通用的东西,您还可以使用源代码格式化工具。对于C,我之前使用过uncrustify并且它运行得相当好。也可能有其他人,但我认为unrustify可以使用cmt_cpp_to_c
参数将C ++样式注释更改为C样式注释。
配置可能有点令人生畏,但如果您只使用示例配置文件并仅更改您感兴趣的内容,则可能会执行您想要的操作。
答案 2 :(得分:1)
不幸的是,大多数脚本只会以相反的方式工作。有一个很好的名为“RECOMMENT”但它需要C并转换为较新的C ++样式注释。我想你想要这样做的原因是由于C ++样式注释的编译器错误。通常的原因是使用带有C ++样式注释的C样式注释的行。也许寻找那种特殊情况可以消除你转换回旧式评论的需要。如果没有,遗憾的是你可能需要手工完成。 (我祈祷你没有,因为我知道这可能是多么乏味!)
<小时/> 推荐链接: http://people.sc.fsu.edu/~jburkardt/cpp_src/recomment/recomment.html
答案 3 :(得分:1)
您可以使用Vim插件 Nerdcommenter 执行此操作。
这样可以轻松取消注释文本,然后添加您想要的多行注释。
答案 4 :(得分:1)
好吧,1,$s#//\(.*\)#/*\1 */#
只有在(通常是多行)C风格的评论中没有C ++风格的评论实例时才会起作用,因为替换会过早地结束C风格的评论,留下余下的没有开始/*
的C风格评论的一部分。
任何包含*/
的常规C ++风格注释也会导致问题。这种情况发生在代码中,糟糕的程序员将C风格的注释更改为C ++风格的注释而不删除结尾*/
。
答案 5 :(得分:1)
这是表面上的一个简单问题,但处理所有边缘情况是一个非常困难的问题。简单的解决方案很容易在sed中实现:
sed -e 'sX// *\(.*[^ ]\) *$X/* \1 */X' < oldfile > newfile
您可以根据需要进行调整:我会在评论的开头和结尾处占用所有空格。
这不会处理具有嵌入式旧式评论的新式评论(正如其他人所指出的那样)。真正搞砸的是带有双斜线的字符串 - 它们不是注释,但如果不解析字符串,它们就会被修改,就好像它们一样。检查那些:
egrep '//.*/[*]|".*//' oldfile
如果您点击其中任何一个,他们将需要手动更正。任何尝试自动化它而不实际解析文件只会创建新的更复杂的边缘条件,尽管你可能会认识到一个适合你情况的黑客模式。
答案 6 :(得分:0)
对于那里的所有编码员!以下解决方案可与Eclipse,Sublime和其他支持正则表达式的编辑器一起使用。
瞧瞧!
答案 7 :(得分:0)
Vim Nerdcommenter替代delims地图
如果您这样做:<leader>ca
某些文件类型具有备用的注释样式,尤其是对于C / C ++,它允许在2.5.2中测试的//
和/*
之间切换。 / p>
然后,您可能还会对<leader>cs
所使用的“性感评论模式”感兴趣,该模式可以很好地完成C多行评论,如以下所述:NERD commenter : How to comment out a range