Альтернативный подход заключается в компиляции с "-g" и чтении отладочной информации.
Этот ответ может помочь вам прочитать отладочную информацию и выяснить параметры функции (это Python, а не bash, но я бы все равно рекомендовал использовать Python или Perl вместо bash).
Полученное решение будет гораздо более надежным, чем все, что основано на разборе текста.Он будет иметь дело со всеми различными способами определения функции и даже с сумасшедшими вещами, такими как функции, определенные в макросах.
Чтобы убедить вас лучше (или помочь вам сделать это правильно, если вы не уверены), вот список тестовых случаев, которые могут нарушить ваш анализ:
// Many lines
const
char
*
f
(
int
x
)
{
}
// Count parenthesis!
void f(void (*f)(void *f)) {}
// Old style
void f(a, b)
int a;
char *b
{
}
// Not a function
int f=sizeof(int);
// Nesting
int f() {
int g() { return 1; }
return g();
}
// Just one
void f(int x /*, int y */) { }
// what if?
void (int x
#ifdef ALSO_Y
, int y
#endif
) { }
// A function called __attribute__?
static int __attribute__((always_inline)) f(int x) {}