我维护了几个适度大小的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支持是必须的;免费软件会很好但不是绝对必需的。
答案 0 :(得分:3)
Clang index library似乎是一个相当不错的候选人。我个人没有对它进行过严格的一致性测试,但they claim唯一缺少的C99功能是浮点编译指示(不应影响交叉引用生成)。