2010-03-18 22 views
3

我維護幾個中等大小的C程序,並且我經常使用完全準確的交叉引用信息。與「標籤」或其他近似方法不同,這些信息通常由編譯器生成,該編譯器知道C語言的全部範圍規則並能相應地提供準確的信息。例如,這裏是從lcc編譯器獲得的信息片段:如何獲得C99代碼的字符精確標識符交叉引用?

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支持是必須的;免費軟件會很好,但不是絕對必需的。

回答

3

Clang index library似乎是一個相當不錯的候選人。我個人沒有對它進行嚴格的一致性測試,但是they claim表示唯一缺少的C99特性是浮點雜注(不應該影響交叉引用生成)。

+0

看起來很有用,但血腥複雜。需要一段時間來評估。感謝指針。 +1 – 2010-03-18 23:39:59

相關問題