Я поддерживаю несколько скромных программ на C, и у меня часто есть возможность использовать точную информацию о перекрестных ссылках. В отличие от «тегов» или других приближений, такая информация обычно генерируется компилятором, который знает полные правила области видимости языка C и может соответственно предоставить точную информацию. Например, вот фрагмент информации, полученной из компилятора lcc
:
function eval src=scheme.nw:4101.0 use=scheme.nw:4101.0
use=scheme.nw:4174.35 use=scheme.nw:4334.11 use=scheme.nw:4335.11
use=scheme.nw:4337.11 use=scheme.nw:4340.14 use=scheme.nw:4341.4
use=scheme.nw:4351.12 use=scheme.nw:4305.32 use=scheme.nw:4324.29
use=scheme.nw:4278.7 use=scheme.nw:4201.8 use=scheme.nw:4234.11
type=struct Value function(pointer to struct Exp,pointer to incomplete
struct Env defined at scheme.nw:3889) sclass=auto scope=GLOBAL flags=0
ref=3.710000 ncalls=46
Это говорит мне о том, что функция eval
определена в исходном файле scheme.nw
, строка 4101, столбец 0, и в ней перечислены все места, где также используется eval
.
Моя проблема: lcc
работает только для ANSI C, и большинство моих проектов переносятся на C99. Какой компилятор или инструмент предоставят полностью точную информацию о перекрестных ссылках для программ C99?
Поддержка Linux обязательна; бесплатное программное обеспечение было бы неплохо, но не обязательно.