私はいくつかの適度なサイズの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のサポートは必須です。自由ソフトウェアは素晴らしいでしょうが、絶対に必要というわけではありません。