Извлечь типы параметров функций 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