如何获得C99代码的字符精确标识符交叉引用?

时间:2010-03-18 22:52:30

标签: c compiler-construction c99 cross-reference

我维护了几个适度大小的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 个答案:

答案 0 :(得分:3)

Clang index library似乎是一个相当不错的候选人。我个人没有对它进行过严格的一致性测试,但they claim唯一缺少的C99功能是浮点编译指示(不应影响交叉引用生成)。