我想实现一个简单的实用程序,它将采用 C 源文件和函数、结构、枚举或其他名称的名称,并直接在元素上方输出注释(如果存在)。
IE。
/* This is a doc comment
* I want this comment extracted
*/
void function_foo(){
}
用法:
utility file.c function_foo
输出:
This is a doc comment
I want this comment extracted
这样做的用例是,我想在 emacs 中使用 org-babel 来处理源文件中函数的文档。也许有 doxygen 工具或 clang 工具可以做到这一点?我只是还没有找到它。最终结果是,我可以轻松地保持从直接在包含其他内容的文档组织文件中的代码中提取的最新文档。
答案1
尝试:
utility() {
FUNC=$2 perl -l -0777 -ne '
if (
m{
^ /\* \s* ((?s:(?!\*/).)*?) \s* \*/ \s* \n
(?:\w.*\h)? \Q$ENV{FUNC}\E \h* \(
}mx
) {
$comment = $1;
$comment =~ s/^\s*\*\s*//gm;
print $comment
}' < "$1"
}
它假设注释和函数定义位于行的开头(没有前导空格),以避免函数调用出现误报。
现在,在重新发明轮子之前,您可能需要看看以下内容doxygen
它为基于代码的文档提供了一个框架。