parsing - ctags:获取C函数结束行号

标签 parsing awk tags ctags exuberant-ctags

是否也可以通过 ctags 获取函数结束行号

"ctags -x --c-kinds=f filename.c"

上面的命令列出了函数定义的起始行号。想要一种获取函数结束行号的方法。

其他方法:
awk 'NR > first && /^}$/ { print NR; exit }' first=$FIRST_LINE filename.c

这需要正确格式化代码

例子:
文件名.c
  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 int main()
  4 {
  5    const char  *name;
  6 
  7     int a=0
  8     printf("name");
  9     printf("sssss: %s",name);
 10 
 11     return 0;
 12 }
 13 
 14 void code()
 15  {
 16         printf("Code \n");
 17  }
 18 
 19 int code2()
 20    {
 21         printf("code2 \n");
 22         return 1
 23    }
 24 

输入:文件名和函数起始行号。
Example:

    Input: filename.c  3
    Output: 12

    Input : filename.c 19
    Output : 23

有没有更好/简单的方法来做到这一点?

最佳答案

Universal-ctags( https://ctags.io ) 的 C/C++ 解析器有 end: 字段。

jet@localhost tmp]$ cat -n foo.c
     1  int
     2  main( void )
     3  {
     4  
     5  }
     6  
     7  int
     8  bar (void)
     9  {
    10  
    11  }
    12  
    13  struct x {
    14      int y;
    15  };
    16  
[jet@localhost tmp]$ ~/var/ctags/ctags --fields=+ne -o - --sort=no foo.c
main    foo.c   /^main( void )$/;"  f   line:2  typeref:typename:int    end:5
bar foo.c   /^bar (void)$/;"    f   line:8  typeref:typename:int    end:11
x   foo.c   /^struct x {$/;"    s   line:13 file:   end:15
y   foo.c   /^  int y;$/;"  m   line:14 struct:x    typeref:typename:int    file:    

关于parsing - ctags:获取C函数结束行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41076640/

相关文章:

objective-c - 用于解析 html 的正则表达式;

awk - 如何使用 AWK 在 Begin 语句中定义动态数组

django - 与简单的 ManyToManyField() 标记实现相比,Django-Taggit 有什么好处?

python - 如何在 Python 中解析 HTTP 日期字符串?

html - XPath 可以用来解析静态 HTML/JSP 页面吗

linux - awk脚本中的命令行输入?

unix - 使用大于数字的列值过滤文件(awk 不起作用)

CSS 帮助,如何在 div 中定位此链接

html - 在WPF控件中,有哪些类似 `<div>`的HTML标签?

java - 使用 Java 在 Windows 中读取 UTF-8 格式的 xml 文件会出现 "IOException: Invalid byte 2 of 2-byte UTF-8 sequence."错误