提取 C 函数的参数类型

Extract C functions' parameter types

给定一个 .c 文件和一个标识文件中定义的函数的函数名称,我们如何自动提取其参数的类型(以其逐字字符串形式)?例如,C 函数看起来像

int foo(double x, double* y){...}

我需要输出到一个文件,比如说 types,有两行

double 
double* 

我想 LLVM 应该有点过头了。也许使用一个简单的Unix命令,比如'awk'就可以完成这项工作?

试试这个:

ctags -x xpd.c | sed -n '/function/{s/.*(//; s/).*//; /^$/d;
s/\*\([^ ]\)/* /; s/ *[^ ]*, */\n/g; s/ *[^ ]*$//; p; }'

这会从我的 C 代码中提取类型,但我不能说它适用于所有 C - YMMV。

sed 的一些注意事项:

  • 前三个语句产生一个缓冲区,如下所示:double x, double *y
  • 下一条语句将*y分成* y
  • 下一个将标识符后跟逗号变成换行符:x, -> \n
  • 最后一个替换丢弃尾随标识符:y