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使用されているすべての場所も一覧表示していることを示しています。

私の問題:lccANSI Cでのみ機能し、私のプロジェクトのほとんどはC99に移行しています。 どのコンパイラまたはツールがC99プログラムの完全に正確な相互参照情報を提供しますか?

Linuxのサポートは必須です。自由ソフトウェアは素晴らしいでしょうが、絶対に必要というわけではありません。

4

1 に答える 1

3

Clang インデックス ライブラリは、かなり適切な候補のようです。私は個人的には深刻な適合性テストを行っていませんが、欠けている C99 機能は浮動小数点プラグマだけであると主張しています (これは相互参照の生成に影響を与えるべきではありません)。

于 2010-03-18T23:03:42.923 に答える