GNU cflow
は、Cソースファイルの集まりを分析し、プログラム内で制御フローをグラフ化してグラフを出力します。gnu cflow - "typedef struct"を認識しない
マイ.c
または.cpp
ファイル
typedef struct _type_1{
int a;
} type_1_t;
typedef struct _type_2{
int a;
} type_2_t;
int main()
{
type_1_t t1;
type_2_t t2;
t1.a = 55;
t2.a = 99;
return 0;
}
コマンドがcflow.exe test.c -i s -i x > test.graph 2>&1
で、出力は次のとおりです。
cflow.exe:test.c:7: a redefined
cflow.exe:test.c:2: this is the place of previous definition
main() <int main() at test.c:11>:
type_1_t <type_1_t at test.c:3>
t1
type_2_t <type_2_t at test.c:8>
t2
QUESTION
なぜそれが "を再定義" と言っていますか?
typedef struct
構造を認識できないためにのみ問題があります。どうすれば修正できますか?
UPDATE
私は--debug=1
で再びcflow
を実行し、それが私にこの与えた:私たちは疑いのと同じように
test.c:3: type _type_1
test.c:3: a/-1 defined to int a
test.c:3: type_1_t/-1 defined to type_1_t
test.c:8: type _type_2
cflow.exe:test.c:7: a redefined
cflow.exe:test.c:2: this is the place of previous definition
main() <int main() at test.c:15>:
type_1_t <type_1_t at test.c:3>
t1
type_2_t <type_2_t at test.c:8>
t2
f1() <int f1() at test.c:10>
test.c:8: a/-1 defined to int a
test.c:8: type_2_t/-1 defined to type_2_t
test.c:11: f1/0 defined to int f1()
test.c:16: main/0 defined to int main()
を:それは、各構造体を処理することはありません。 。 。構造体、すなわち、2つの異なる構造体に全く同じ識別子を持つことができます。
これを修正するにはどうすればよいですか?私はcflow
メーリングリストにメールを送っています。すぐに聞いてくれることを願っています。それまでは、私はsyntactic classesで遊んで、正しい動作を引き起こすことができないかどうかを確認します。
メーリングリストから回答が返ってきたら私自身の回答を投稿します。
4386427 @私は' cflow'は、それが再定義されているだと思った理由を知っています。 – Adrian
あなたは結論に飛びついていると思います。私はなぜ 'cflow'が' a'が再定義されたと言っているのか分からないが、普及しているツールが何十年もの間スタンダードCにあった機能を理解することはできないだろう。私はUbuntu上でcflow 1.4を使用してそのエラーを取得しません。 'cflow --version'は何を出力しますか? –
@KeithThompson私はWindows上で 'cflow' 1.5を使用しています。 1.4で試してみます。また、Linuxでは、[環境変数と.cflowrc](https://www.gnu.org/software/cflow/manual/cflow.html#Configuration)から設定値を読み込みます。だから、 'cflow'に' typedef struct'を解析する方法を伝えるいくつかの設定オプションであなたが読み込んでいるかもしれません。私は1.4をビルドして戻ってくる – Adrian