現在、関数の行数に基づいてプログラム内の関数の複雑さを見つけるために C でプログラミングしています。既存の C ファイルを fopen し、計算を続行する必要があります。それを見つけるための組み込みツールがいくつかあることを私は知っています。それでも、手動でプログラムしたいのです。Cファイル内のさまざまな関数の開始と終了を見つける特定の方法はありますか?
3 に答える
これを C プリプロセッサで実行します。このようにして、コメントを削除し、マクロをアンロールし、#include などを含めます。ユーザーが読めるコードの複雑さが必要でない限り、これにより、より正確な結果が得られます。
固定弦を外します。エスケープされ
""
た引用符\"
は文字列を閉じないことに注意してください。ファイルをスキャンします。最初
{
に関数の数を増やし、関数の本体のスキャンを開始します。深さを観察します。{
深度が増加し、}
減少し、深度が 0 に達すると、別}
の関数が終了します。Next{
は新しい機能になりますが、外側をスキャンしていて、next に到達する前に、{
または-EOF
に遭遇した場合は;
、最後のピースで収集されたデータをキャンセルします。それは関数ではなく、構造体、共用体、またはそのようなものでした。
2パスアプローチをお勧めします。
パス 1: コメント内の左中括弧または右中括弧 (およびオプションでプリプロセッサ ディレクティブ内のもの) をすべて削除します。
パス 2: 開始中括弧と終了中括弧をカウントし、それらが一致する (#open == #close) たびに関数が終了します。次の左中括弧は、新しい関数の開始を示します。
このアプローチはフェイルセーフではありません。コードに適切なプログラミング プラクティスに違反するプリプロセッサ ステートメントが含まれている場合、失敗する可能性があります。このようなコードに遭遇した場合は、コードがプリプロセッサ ステージを通過した後にツールを実行することをお勧めします。