如何从文件中提取函数?

如何从文件中提取函数?

我正在寻找一个命令来从我的代码中提取 C 函数。它会是这样的:

$ grep -func "MyFunction" foo.c

int MyFunction(int i) {
    return i+1;
}

我知道我们可以用正则表达式提取它,但我正在寻找更友好的东西。

答案1

假设该文件在语法上是正确的,您可以使用以下格式对其进行格式化,indent并使查找和提取函数的过程变得更加简单:

  • 使用indent,您可以将函数名称放在一行的第一列中,后跟左括号,然后
  • 之后,'}'第一列中出现的下一个右大括号将结束该函数。

indent这是一个使用 GNU和 的简单示例awk

#!/bin/sh
# $1 = file name
# $2 = function name
indent -st -orig "$1" | awk '
BEGIN { state = 0; last = ""; }
$0 ~ /^'$2'\(/ { print last; state = 1; }
        { if (state == 1) print; }
$0 ~ /^}/ { if (state) state = 2; }
        { last = $0; }
'

答案2

如果您只需要函数头,您可以使用ctags

$ ctags -x foo.c
MyFunction         1 foo.c            int MyFunction(int i) {

相关内容