Извлечь типы параметров функций C

Учитывая файл.c и имя функции, которая идентифицирует функцию, определенную в файле, как мы можем автоматически извлечь типы (в дословной форме строки) ее параметров? Например, функция C выглядит так

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

Мне нужно вывести в файл, скажем typesс двумя строчками

double 
double* 

Я думаю, LLVM должен быть излишним. Может быть, с помощью простой команды Unix, такой как 'awk', уже можно выполнить эту работу?

1 ответ

Решение

Попробуй это:

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

Это вытягивает типы из моего C-кода, но я не могу сказать, что он будет работать для всех C - YMMV.

Некоторые заметки о седе:

  • первые три оператора дают буфер примерно так: double x, double *y
  • следующее утверждение отделяет *y в * y
  • следующее превращает идентификатор, за которым следует запятая, в новую строку: x, -> \n
  • последняя замена отбрасывает завершающий идентификатор: y
Другие вопросы по тегам