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

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支持是必须的;免费软件很好,但不是绝对必需的。
1个回答

3

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


看起来很有用,但是非常复杂。需要一段时间来评估。感谢指引。+1 - Norman Ramsey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接