質問: 業務で、ロジック内の関数や、その関数が使用しているグローバル変数などを洗い出し、分析する必要があります。 例えば、Eclipseのコードリーディング機能のように、統合環境の機能を使えば、関数の一覧を出したり、関数の階層や使用しているグローバル変数などを見ることは出来ますが、そういった情報をもっと自由自在にExcelにまとめ、テスト仕様書や関数仕様書作成を自由自在に作れるようになりたいのです。 その為には、Cのコンパイラが変数内からどのように関数や変数を識別しているのか? または、Eclipseなどの統合環境がどのように関数の階層を分析して階層表示させているのか、その具体的なロジックを知りたいと思っています。 その為に一体どこから手を付けたらいいのやらという感じです。。。 CコンパイラやEclipseなどがどのように関数や変数を判別しているのか? それを知るのに何かいい方法は無いものでしょうか? ごちゃごちゃ書きましたが、まずは、 「Cプログラムの中から、関数一覧を抽出してエクセルに吐き出す」 というVBAを組んでみたいと思います。 それには、どうしたらいいのでしょう? C言語のプログラムの中で関数かそうでないかを判定するにはどうしたらいいのでしょうか? まずはC言語の正しい仕様を理解するところからですね。 C言語の正しい仕様はどうしたらてにいれられれるのでしょうか
回答: こんにちは。 Cコンパイラは構文解析してます。構文解析器を作ればできます。 「第1回:かんたん構文解析入門」という記事がありました。なかなかハードな印象です。 can110さんが紹介されているDoxygenは、ソースコードを構文解析し、さらにDoxygenの約束に従ってコメントを付けることでドキュメント化してくれます。clangコンパイラの構文解析ライブラリのドキュメントはDoxygenで作られています。 Doxyenにソースコードをぶち込んだだけでも、ある程度解析してくれますし、有用ではないかと思います。 恐らく現実的な線と思います。 「clangで関数呼び出しを抜き出す」は、上記clangコンパイラの構文解析ライブラリ(libTooling)を使って関数リストを抜き出す記事です。 このlibToolingを使いこなせると、この手の目的のためには非常に有用です。FunctionDeclが関数、VarDeclが変数です。C言語なら、この2つから辿ればそこそこ解析出来るはずです。 libToolingの使いこなしもそこそこハードですが、もし、コンパイラ周辺に興味があるのならばこれを使いこなすと結構強みになると思います。(緩いライセンスなのでかなり自由に使えますし。)