pmccabe - クラウド上のオンライン

これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、または MAC OS オンライン エミュレーターなどの複数の無料オンライン ワークステーションの XNUMX つを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド pmccabe です。

プログラム:

NAME


pmccabe - C および C の McCabe 循環複雑度またはコメントされていない行数を計算します。
C++ プログラム

SYNOPSIS


午後 [-bCdfFntTvV?] [ファイル]

DESCRIPTION


午後 指定されたファイルを処理するか、名前が指定されていない場合は標準入力を処理します。 デフォルトモードでは
各関数のマッケイブ循環複雑度を含む統計を計算します。 の
ファイルは C (ANSI または K&R) または C++ であることが想定されます。

-? 有益な使用法メッセージを出力します。

-v 列ヘッダーを印刷する

-V 印刷物 午後 バージョン番号

コメント解除 モード
-d 次のような方法で、コメントされていないソース行をカウントできるようにすることを目的としています。

pmccabe -d *.c | grep -v '^[ ]*$' | トイレ -l

コメントは削除されており、 cpp ディレクティブは次のように置き換えられます cpp、文字列リテラルは
と取り換える 文字列リテラル、文字定数は次のように置き換えられます。 シャルリテラルを選択します。
結果として得られるソース コードは解析しやすくなります。 これは、によって実行される最初のステップです
午後 そのパーサーがより単純になるようにします。

他のオプションはどれも適切に機能しません -d.

行数カウント モード
-n コメントされていないソース行をカウントします。 出力形式は、
アナック ただし、必要に応じて列ヘッダーと合計を要求する必要がある点が異なります。
列ヘッダーが必要な場合は追加します -v。 合計を追加したい場合は、 -t。 あなたが望むだけなら
合計を加算します -T.

複雑 モード (デフォルト)
-C カスタム出力形式 - 使用しないでください。

-c 生のデータではなく、関数 (およびファイル) ごとにコメントなし、空白でない行をレポートします。
行数。 注意 それ プリプロセッサ ディレクティブ   NOT カウントされます。

-b コンパイラエラー閲覧ツールと互換性のある出力形式
「古典的な」コンパイラ エラー。 この形式での数値並べ替えは、次を使用して可能です。

ソート -n +1 -t%

-t 列の合計を出力します。 行の合計数は、非行の数ではないことに注意してください。
コメント化されたソース行 - 「wc -l」で報告されるものと同じです。

-T 列の合計を *のみ* 出力します。

-f ファイルごとの合計と関数ごとの合計を含めます。

-F ファイルごとの合計を出力しますが、関数ごとの合計は出力しません。

解析
午後 すべて無視します cpp プリプロセッサ ディレクティブ - プリプロセッサ ディレクティブの複雑さを計算します。
プリプロセッサがコードを破壊した後の複雑さではなく、コードの外観を重視します。
これは特に重要です。 ゲッター(3) マクロに展開すると、
複雑さが増します。

出力 フォーマット
次の形式で見つかった関数ごとに、標準出力に XNUMX 行が書き込まれます。

修正されたマッケイブ循環複雑度
| 従来の McCabe の循環的複雑性
| | # 関数内のステートメント
| | | 関数の最初の行
| | | | 関数内の # 行
| | | | | ファイル名(定義行番号):関数
| | | | | | | | | | | |
5 6 11 34 27 gettoken.c(35): 一致する括弧

列 1 には、(関数の) 1 を加算することによって計算された循環的複雑度が含まれます。
の発生 for, if, while, スイッチ, &&, ||, ?。 「通常の」マッケイブ サイクロマチックとは異なります。
複雑さの場合、switch ステートメント内の各ケースは追加の複雑さとしてカウントされません。 これ
switch ステートメントと複雑さの処理は、「通常の」手段よりも役立つ可能性があります
メンテナンスの労力とコードの難易度を判断するために。

列 2 は、スイッチに関する「通常の」方法で計算された循環的複雑度です。
発言。 具体的には、列 1 と同様に計算されますが、それぞれをカウントします。 場合 むしろ
より スイッチ テストの労力を判断するには列 1 よりも役立つ可能性があります。

列 3 にはステートメント数が含まれます。 これは、次の各発生を加算することによって計算されます。 for,
if, while, スイッチ, ?、関数内のセミコロン。 考えられる驚きの XNUMX つは、
for ステートメントの最小ステートメント数は 3 です。これは現実的です。 のために; B;
C){...} は本当に~の略語です A; while (B) { ... C;}。 内のステートメントの数
ファイルは、その中に実装されている各関数のステートメントの数の合計です。
ファイルに加えて、これらの関数ごとに XNUMX つ (関数もステートメントであるため)、さらに
ファイルスコープのステートメント (通常は宣言) に対して XNUMX つずつ。

列 4 には、関数の最初の行番号が含まれます。 これは必ずしも同じではありません
関数名が表示される行。

列 5 は、列 4 の数値から次の関数までの関数の行数です。
右中括弧を含む行。

最後の列には、ファイル名、関数名が出現する行番号、
そして関数の名前。

アプリケーション


明らかな応用例 午後 以下にリストを示します。
最も複雑な関数「トップ XNUMX」:

pmccabe *.c | 並べ替え -nr | 頭 -10

多くのファイルには複数の C 関数が含まれており、抽出すると便利な場合があります。
それぞれの機能は個別に行われます。 matchparen() (上記の出力例を参照) は次から抽出できます。
27 行目から始まる 34 行を抽出して gettoken.c を作成します。これはツールの基礎を形成できます。
ファイルの代わりに関数を操作するもの (たとえば、 差分(1)).

診断


午後 ファイルを開けなかった場合、および次のエラーが発生した場合は、ゼロ以外の終了ステータスを返します。
いくつかの解析エラー。

標準エラーへのエラー メッセージ。通常はパーサーが混乱していることを説明します。
何か、古典的な C コンパイラのエラー メッセージを模倣します。

警告


午後 一致しない中括弧や括弧が使用されることがあるために混乱を招くことがあります。
性急な使用 cpp 指令。 このような場合、診断が出力され、複雑さは
指定されたファイルの結果は信頼できない可能性があります。 ほとんどの場合、「#ifdef」ディレクティブは次のようになります。
中括弧が一致するように変更されました。 場合に注意してください。 午後 に混乱しています cpp
ディレクティブを使用すると、ほとんどのきれいなプリンタも同様になります。 場合によっては、次のように前処理します。 unifdef(1)
適切かもしれません。

ステートメントのカウントは、次の方法で改善できる可能性があります。 カンマの出現をカウントする
演算子、複数の代入、条件付きテスト内の代入、および論理
接続詞。 ただし、言語からの明確なステートメント定義がないため、または
私が問い合わせた人によると、明細カウントはおそらく改善されないでしょう。 持っている場合は、
鮮明な定義です。喜んで検討させていただきます。

テンプレートの原因 午後のスキャナーを終了します。

それは残念です クタグス 出力は提供されません。

onworks.net サービスを使用してオンラインで pmccabe を使用する



最新のLinuxおよびWindowsオンラインプログラム