teratail header banner
teratail header banner
質問するログイン新規登録

質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.30%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

1回答

2506閲覧

宇賀C言語プログラムを静的解析によって、関数とグローバル変数の関係性を洗い出したい

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2017/12/22 16:28

編集2017/12/23 05:54

0

0

先日、以下の質問をさせて頂きました。

その続きです。

ロジック内の関数や関数内で使用しているグローバルなどの解析を行うプログラムを作成したいのですが。。。
https://teratail.com/questions/104700

Eclipseの呼び出し階層の内容をEXCELにまとめる方法について
https://teratail.com/questions/105199

やりたい事は、プログラム内のグローバル変数がどの関数で値が書き込まれ、どの関数で読まれているかを一覧にまとめる事です。

例として、このようなEXCELの表を作りたいと思っています。

イメージ説明

この表でいくと、g_Patameter1というグローバル変数は、Function1で値が書き込まれ、Function3で値がよまれているという事がわかります。

このような表を完成させるために、静的解析プログラムを作成したいと思ったのですが難しすぎて挫折し、Eclispseの機能でコツコツやればできないこともないのですが、手作業では気の遠くなる時間がかかることと、人の手作業ではミスも起こるので、なんとかツールなどを使って効率よくできないものかと思っています。

また、ひとつ難しいのは、グローバル変数のアドレスがポインタ変数に渡った場合です。

この場合は、ポインタ変数の値を書き換えれば、間接的にグローバル変数の値を書き換えたことになるので、その場合も考慮できる必要があります。

ExcelipseのEclipseのコードリーディング機能を、VBAなどで捜査して、半自動化できるか、または、コードリーディングをマクロ的にちょっと手間が省ける方法だけでもわかるだけでもありがたいのですが。。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hichon

2017/12/23 01:02

タイトルが、えっちなのはいけないと思います!
退会済みユーザー

退会済みユーザー

2017/12/23 05:55

すいません!直しました!放送コードに引っかかる用語ではなかったのでよかったです!
guest

回答1

0

ベストアンサー

こんにちは。

回答ではないのですが。

この場合は、ポインタ変数の値を書き換えれば、間接的にグローバル変数の値を書き換えたことになるので、その場合も考慮できる必要があります。

静的解析では事実上不可能です。
そのポインタの値を決定するために外部からの入力値を使うこともあると思います。(といいますか、だからこそポインタ経由の場合が多いと思います。)その入力値も含めた解析は静的には行なえません。

投稿2017/12/22 18:27

Chironian

総合スコア23274

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/12/22 23:45

Chironian様 ご回答ありがとうございます。 では、単にそのグローバル変数に書き込まれている関数と読み込まれている関数だけでもわかるといいんですけどねぇ。 ポインタに書き込まれている部分以外が明白になっただけでもかなり楽になりますので。。。
Chironian

2017/12/23 03:13

そこを許容できるのであれば、前回回答したlibToolingを使って、FunctionDeclとVarDeclを解析すればできます。 もし、コンパイラの仕組みやC++にも興味をお持ちであれば、これを学ぶのは有用と思います。 そうでない場合は、そこまで自力でやるのは費用対効果の面で疑問があります。お金を払って外部へ依頼することを検討した方が現実的と思いますよ。C++に熟練していない社員を一名投入する場合、恐らく数ヶ月以上かかると思います。それよりは安く品質も良いものが短期間で出来るのではないかと思います。
退会済みユーザー

退会済みユーザー

2017/12/23 05:50

Chironian様 ご回答ありがとうございます! libTooling、使ってみようと思います。 ただ、ググったりAmazonで検索してみたりしたのですが、参考となる情報が少ないようです。 これを使いこなせるようになるために、参考になる本、サイトなどはないでしょうか?
退会済みユーザー

退会済みユーザー

2017/12/23 05:53

あ、すいません。 前々回の回答でかなり参考のURLを載せて頂いていましたね。 まずは、これで勉強してみようと思います。 ありがとうございましたm(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問