我正在寻找一个命令来从我的代码中提取 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) {