【问题标题】:Retrieve all the comments from a large C project从大型 C 项目中检索所有注释
【发布时间】:2011-09-02 02:43:26
【问题描述】:

我有几个充满 C 代码的目录,我想从所有目录和子目录中的所有代码(.h 文件和 .c 文件)中检索所有 /* */ cmets,将这些 cmets都在一个文本文件中(事情不需要特别有条理,只需将它们全部塞在那里)。我该怎么做?

任何可编写脚本的解决方案都会很棒...

【问题讨论】:

  • 如果您有 linux,您可以轻松做到这一点吗?只是命令行它:X
  • 你到底为什么要这样做?嗯,我想寻找淫秽内容是一个原因,但你最好在整个代码库中搜索它们。
  • doxygen 不正是这样做的吗?还是我弄错了?
  • Doxygen 的默认设置是不显示正常的 cmets。 Doxygen 寻找 special 注释块。
  • 您必须意识到声明:const char junk[] = "/* not a comment */"; 不符合评论条件。正则表达式可以处理这种情况吗?

标签: c comments


【解决方案1】:

这是一个 sed 脚本,它打印所有 /* */ cmets,但它会打印字符串中的“cmets”(正如 Thomas Matthews 所指出的),它不会打印 // cmets。不知道嵌套 cmets 会发生什么。

/\/\*/{
    bc
:a
    s/\///;Tz
:c
    s/^[^\/]*//;tb;Tb
:b
    s/^\/\*/\/\*/;Ta
:e
    s/\*\//\*\//;Td;s/\*\//\*\/\n/;x;tg
:g
    s/\(.\)/\1/;Tf;p;s/^.*$//
:f
    x;P;s/^.*\n//;bc
:d
    H;n;be
:z
}

要打印目录中所有文件的所有 cmets,请按如下方式使用:

for i in `find -iname "*.c" -or -iname "*.h"`; do echo ">>> $i"; sed -nf the.script.from.above < $i; done > output.txt

这不会处理其中包含空格的文件名,并且输出不会很漂亮!

干杯

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-25
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多