3

我维护了几个大小适中的 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 支持是必须的;自由软件会很好,但不是绝对必需的。

4

1 回答 1

3

Clang 索引库似乎是一个相当不错的候选者。我个人没有对其进行严格的一致性测试,但他们声称唯一缺少的 C99 特性是浮点编译指示(它不应该影响交叉引用的生成)。

于 2010-03-18T23:03:42.923 回答