- ベストアンサー
VCソースファイルからユーザー定義関数を抜き出す
はじめまして。 VCソースファイル(XXX.cpp)からユーザー定義の関数部分がどれだけあるかを調べたいと考えています。 つまりMFCなどの標準ライブラリー以外がどの程度あるかを調べたいと思いますが、なにか方法はありますでしょうか? よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
# 私個人は、MFCから独自に派生するクラスはMFCの定義ではない、 # スケルトンでもWizardでも全部ユーザ定義だと思ってますが、 # (他人はそんなクラスの定義を知らないでしょう?という考え方) # ここでは以後、そういう考え方はしない前提で話を続けます。 > ソースファイル(XXX.cpp)をエディターで開いてみて、 > どの部分がスケルトンで、どの部分がClassWizardで > 作成された部分というのはわかるものでしょうか? 「よく知ってる人」ならわかるでしょう。 # 私でも、主要なスケルトンの生成関数は覚えてますから、見ればわかると思います。 そうでなければ、ソースだけでは多分、完全な特定は無理です。 開発環境があれば、スケルトンか否かは比較簡単にわかると思います。 プロジェクトのタイプはわかりますね?そのタイプで、設定も同じにして、スケルトンを生成してみればいいのです。 ここにあるものだけがスケルトン生成の関数です。diffをとるなり、最後に除外するなりしてください。 ClassWizardの方は、現在のソースから推測するのは骨です。 # 版管理等に記録があれば参考にはなるかも…とはいえ、普通、途中ではcommitしないので期待薄か…。 # まず、Mircosoftのコメントの癖を把握する必要があると思います。 例えば私の例ですが、 Wizardを使うのが面倒で、Wizardが書くのと同じ関数を自分で書いたりすることがあります。 この場合、関数の体裁は一見Wizard製に見えます。 でも、Microsoftの書くコメント(ここに処理を…)などは書かないので、これがあればまぁWizard製だと推測できます。 私はまた、Wizardから実際に生成した関数内の上記コメントが邪魔な場合に削除することもあります。勿論しないこともあります。 # プログラマは多分、そんなコメントに気を配って修正しないと思います。 # (後の保守性に有効なもの以外は無意味なものなので) これから考えると、Wizardのコメントがないものは自作したか、修正したものなので、Microsoftが生成する癖のあるコメントが「ない関数」はいずれもユーザ定義といえます。 ただし、コメントがあるだけではWizard製であることはわかりますが、修正が行われたかがわかりません。これを個別に確認する必要があります。 確認方法としては、同じものをWizardで生成してみて、比較すればわかるでしょう。 # 「よく知っている人」なら生成コードの「癖」も大体わかるので、 # 見れば判断が付くものもあるかもしれません。 ちなみに、目的というか、用途は何ですか? もしかして行数でお値段が決まるとか、そういう話ですか? # 同じものを少ないコードで書くほど、優秀なプログラマ、なら理解できますが。 # なお、私の場合はコードのコピペをしない前提です。 # コメントを含めてコピペしまくったソースの場合は、 # もうわからないと思っていいでしょう。
その他の回答 (2)
- MrBan
- ベストアンサー率53% (331/615)
> VCのスケルトン、およびClassWizard(相当)で作成したままの関数は、 > ユーザー定義としませんが、編集したものについてはユーザー定義と考えています。 結局、関数定義の数を数えるので? だとすると、概算でいいなら別ですが、VC6だとプロジェクトの関数表示は正確じゃなかったりすることが多々あります。 (VC7以降で大幅改善してます>IDE) で、「スケルトンやClassWizardで作ったままか否か」を加味したいと。 これは関数の中を見ないと判断できませんね。 方法としてはやっぱり「地道に数えてください」ですかね。 作業工数を突きつけて、そんなものを数えなくて言いように交渉する、とか。 行数だけ数えるなら、スケルトンにClassWizardで同じものだけ足して、diffをとるのが一番らくそうかも。 これで何がうれしいのかよくわかりませんが。
補足
早速、アドバイスを頂きありがとうございます。 ソースファイル(XXX.cpp)をエディターで開いてみて、 どの部分がスケルトンで、どの部分がClassWizardで 作成された部分というのはわかるものでしょうか?
- MrBan
- ベストアンサー率53% (331/615)
> つまりMFCなどの標準ライブラリー以外がどの程度あるか > を調べたいと思いますが、なにか方法はありますでしょうか? 具体的に「何の情報がほしいのか」にもよって多少マシになるかもしれませんので、とりあえず補足してください。今の情報では漠然としすぎです。 今の書き込みだけを読むと、こんなアドバイスとか…。 # 多分、簡単な方法はないです。 # 不要なものは除外して欲しいものを数えてください。 # 欲しい情報によっては、ソリューションエクスプローラで数えたり、 # 計測ツールを使ったり、正規表現/文字列解析したりできるかもしれません。 ●VCのバージョンや、プロジェクトの種類などはわかりますか。 > ユーザー定義の関数部分がどれだけあるか ●「関数部分」というのは具体的に何を指しますか。 関数定義(definiton)ですか、関数宣言(declaration)ですか、関数呼出(call)ですか。 ●「どれだけあるか/どの程度あるか」の基準/単位はなんですか。 「数」ですか。「行」ですか。「比率」ですか、母数は何ですか。その他ですか。 > MFCなどの標準ライブラリー ●C/C++の話で標準ライブラリと書くと一般にはMFCは含まないと思いますが(※)、 ここではVisual Studioの付属ライブラリはサードパーティも含め除外対象ということですか。 Win32APIも除外でいいですか。 VCのスケルトンが生成する関数などは、ユーザ定義と分類しますか。 ClassWizard(相当)の生成する関数の方はユーザ定義でよいですか。 ※MFCはMicrosoft社の独自ライブラリで(第三者的な)標準化はされていないため。 「標準ライブラリ」というと、C standard library / Standard Template Libraryを指すことが多い。
補足
あまりにも曖昧な質問で申し訳ありません。 まず、VisualC++のバージョンは6.0になります。 VCのスケルトン、およびClassWizard(相当)で作成したままの関数は、ユーザー定義としませんが、編集したものについてはユーザー定義と考えています。
お礼
晩くなりましたが、なんとか解決することができました。非常に、曖昧な質問ばかりで申し訳ありませんでした。