c - 仅从 C 代码中提取函数名称及其注释

标签 c perl sed awk comments

我想提取注释,想知道它们来自哪些函数。我有很多这样的 C 文件,如下所示:

有输入:

void main()
{
    //sdgs
    call A;
    /*
    sdfgs
    dfhdfh
    */
    call b;
    some code;
}

/* this function adds
 something */
int add()
{
    //sgsd
    some code;
    //more comments
    some code;
}

输出应该是:

void main()
{
    //sdgs

    /*
    sdfgs
    dfhdfh
    */

}

/* this function adds
 something */
int add()
{
    //sgsd

    //more comments

}

输入代码格式整齐,“功能代码”在下一行的 { 之后开始。 基本上,我只需要知道哪个“评论”来自哪个函数。它还应包括函数名称上方或其他地方的任何其他注释。 注意:这是不同的,因为顶层的函数名称应该在那里。

为了简化我的要求:

  1. 打印所有评论
  2. 在第一行检测包含 ( 的 block ,在一到三行之后的第一列仅包含 { 的单行并打印上面的行。

最佳答案

这对于正则表达式是不可能的,你需要编写一个小的 C 解析器。

为什么?

首先需要先替换宏。其次,因为函数定义有点“难以”放入正则表达式中。一些合法的函数定义:

int f() {}
const int f() {}
const char* f(int);
void f(double t);
void f(t,a) int t; int (*a)(float, char, char) {}

关于c - 仅从 C 代码中提取函数名称及其注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8050866/

相关文章:

c - 关于 POSIX 消息队列和无效参数

使用 printf 跨平台打印 64 位整数

python - PyImport_Import 与导入

C 用 exec() 和 fork() 对字符串数组进行排序;

apache - 如何在mod_perl下启用perl调试器?

正则表达式:忽略几个不同位置上的字符

perl - 如何在 Perl 中为未定义的值打印文字 'null'?

bash - 在每个时间 block 之间添加空行

bash - 在 ubuntu 中用 sed 替换字符串

bash - 管道问题在 sed 中查找(查找并替换)