如何自动将所有C语言风格的注释(/* 注释 */
)替换为C++语言风格的注释(// 注释
)?
必须在多个文件中自动完成此操作。只要能实现,任何解决方案都可以。
如何自动将所有C语言风格的注释(/* 注释 */
)替换为C++语言风格的注释(// 注释
)?
必须在多个文件中自动完成此操作。只要能实现,任何解决方案都可以。
这个工具可以胜任此工作:https://github.com/cenit/jburkardt/tree/master/recomment
RECOMMENT是一个C++程序,它可以将C语言风格的注释转换为C++风格的注释。
同时,它还处理了其他人提到的所有非常规情况:
代码中包含了Steven Martin于2005年4月28日在JDS Uniphase,Florida Melbourne提供的建议和编码。这些建议使该程序能够忽略字符串内部的内容(否则可能会看作是开始或结束注释),处理带有尾随注释的代码行,并处理带有尾随代码片段的注释。
这不是一个简单的问题。
int * /* foo
/* this is not the beginning of a comment.
int * */ var = NULL;
你想用什么替换它?任何真正的替换有时都需要拆分行。
int * // foo
// this is not the beginning of a comment.
// int *
var = NULL;
void CreateExportableDataTable(/*[out, retval]*/ IDispatch **ppVal)
{
//blah
}
我同意在你的问题中评论的人的观点。为什么要这样做呢?就让它保持原样吧。
这会浪费时间,增加无用的版本控制提交,有可能弄乱代码。
编辑:
更喜欢C++风格的注释的根本原因是可以注释掉一段可能有注释的代码块。如果是C风格的注释,则注释掉代码块不是直截了当的。- 未知(雅虎)
这也许是一个公平/可以接受的事情,但我对此有两点评论:
你似乎还想使用C风格的注释来屏蔽一段代码?还是你要使用//来屏蔽多行代码?
一种替代方案是针对这种情况的预处理器#ifdef。我对此感到震惊,但它和注释掉行/块一样糟糕。两者都不应该留在生产代码中。
我最近将代码库中所有的C风格注释都转换成了C++风格。由于我找不到一个可以自动执行此操作的工具,所以我写了自己的工具:c-comments-to-cpp
虽然它并非完美无缺,但是比我尝试过的其他任何工具(包括RECOMMENT)都要好得多。其中之一是,它支持转换Doxygen风格的注释,例如:
/**
* @brief My foo struct.
*/
struct foo {
int bar; /*!< This is a member.
It also has a meaning. */
};
转换为:
/// @brief My foo struct.
struct foo {
int bar; ///< This is a member.
///< It also has a meaning.
};
#!/usr/bin/python
import sys
out = ''
in_comment = False
file = open(sys.argv[1], 'r+')
for line in file:
if in_comment:
end = line.find('*/')
if end != -1:
out += '//' + line[:end] + '\n'
out += ' ' * (end + 2) + line[end+2:]
in_comment = False
else:
out += '//' + line
else:
start = line.find('/*')
cpp_start = line.find('//')
if start != -1 and (cpp_start == -1 or cpp_start > start):
out += line[:start] + '//' + line[start+2:]
in_comment = True
else:
out += line
file.seek(0)
file.write(out)
为什么不编写一个C应用程序来解析自己的源文件呢?您可以使用相对简单的正则表达式查询找到/*注释*/部分。然后,您可以将换行符替换为换行符+“//”。
无论如何,这只是一个想法。祝你好运。
如果只有“几个文件”,是否真的需要编写程序?在实践中,用文本编辑器打开它可能更快,除非有很多注释。emacs 有一个 comment-region
命令(不出所料)可以对区域进行注释,因此只需删除有问题的 '/*' 和 '*/'。
这里有几个建议你可以尝试:
a)编写自己的代码(C/Python/任何你喜欢的语言)来替换注释。可以参考regex所说的或者这个简单的解决方案'可能'有效: [除了像rmeador和Darron发布的那种情况]
for line in file: if line[0] == "\*": buf = '//' + 去掉'\*'后的所有字符 flag = True if flag = True: if line ends with '*/': 去掉'*/' flag = False add '//' + line to buf
b)寻找一个工具来完成它。(如果我找到了,我会发帖的。)
c) 现代几乎所有的 IDE(如果你在使用)或文本编辑器都有自动注释功能。你可以手动打开每个文件,选择注释行,决定如何处理情况,然后使用加速键(例如 Ctrl + M)进行 C++ 样式的注释。然后,你可以简单地使用“查找和替换”所有的 "/*" 和 "*/",再次运用你的判断。我已经在 Gedit 中配置了使用“代码注释”插件来实现这一点。我不记得我在 Vim 中是如何做到的。但我相信这样的设置很容易找到。