Парсинг AC-файла вручную, как правило, плохая идея, есть много угловых случаев, и вы в конечном итоге заново изобретаете колесо.
Если вы можете скомпилировать файл с отладочными символами, вы можете легко найти ваши символыwith:
nm -l ./foo --defined-only| grep :
Где:
nm
Перечисляет символы, определенные в двоичном файле -l
Записывает номер файла и строки, гдесимвол определен - grep сохраняет только пользовательские символы.
Например, если я попробую с этим файлом:
int a;
int f1(){}
int f2(){}
int main(){}
Скомпилировано с gcc -o foo foo.c -g
, Я получаю следующие символы:
000000000000402c B a /home/user/foo.c:1
0000000000001125 T f1 /home/user/foo.c:2
000000000000112c T f2 /home/user/foo.c:3
0000000000001133 T main /home/user/foo.c:4
Обратите внимание, что я получаю как функцию, так и глобальные переменные. Если вам нужны только функции, вы можете отфильтровать их, используя 2-е поле, и оставить их только с T
значением
Если вы действительно хотите запустить из своего файла C, выВозможно, вы захотите использовать cscope
( см. этот пост ).