我维护几个规模较小的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支持是必须的;免费软件很好,但不是绝对必需的。