Как я могу получить точную символьную перекрестную ссылку идентификатора для кода C99? - PullRequest
3 голосов
/ 19 марта 2010

Я поддерживаю несколько скромных программ на 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 обязательна; бесплатное программное обеспечение было бы неплохо, но не обязательно.

1 Ответ

3 голосов
/ 19 марта 2010

Библиотека индексов Clang выглядит довольно приличным кандидатом. Я лично не проводил серьезных испытаний на соответствие, но они утверждают , что единственные недостающие функции C99 - это прагмы с плавающей запятой (которые не должны влиять на создание перекрестных ссылок).

...