c - 提取 C 函数的参数类型

标签 c linux parameters llvm

给定一个 .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/\*\([^ ]\)/* \1/; s/ *[^ ]*, */\n/g; s/ *[^ ]*$//; p; }'

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

sed 的一些注意事项:

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

关于c - 提取 C 函数的参数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35348625/

相关文章:

linux - 查找并替换文档中的文本

python - 如何将输入保存到 txt 文件。在linux命令行输入

php - Laravel: 'on clause' 中的未知列 $parameter

javascript - 如何将参数转换为小写?

powershell - 是否可以不调用而解析PowerShell脚本 block 参数?

c - 从 C 控制台获取十六进制值

使用 libtomcrypt 计算 websocket Sec-WebSocket-Accept 值

c++ - 从多个文件描述符异步接收 UDP 数据包

linux原始以太网套接字绑定(bind)到特定协议(protocol)

c - 尾随字符行尾仍然在第一行末尾给出 0920