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