checkcode
MATLAB のコード ファイルの潜在的な問題のチェック
構文
説明
メモ
R2022b において: codeIssues
は、対話機能が向上していて、特定された問題を保存する機能を備えているため、checkcode
よりも推奨されます。
codeIssues
では循環的複雑度は測定されません。循環的複雑度を測定するには、-cyc
オプションまたは -modcyc
オプションを指定した checkcode
を使用します。
checkcode(
は、filename
)filename
について、潜在的な問題とコード改良の余地を報告するメッセージを表示します。これらのメッセージは、「コード アナライザー メッセージ」と呼ばれることがあります。メッセージの行番号はハイパーリンクです。クリックするとエディターでその行に直接移動できます。checkcode
メッセージの正確なテキストは、バージョンにより若干異なる場合があります。
例
サンプル ファイル lengthofline.m
に対して checkcode
を実行します。MATLAB® は lengthofline.m
に関するコード アナライザー メッセージをコマンド ウィンドウに表示します。
checkcode('lengthofline')
L 21 (C 1-9): Value assigned to variable might be unused. L 22 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)). L 23 (C 5-11): Variable appears to change size on every loop iteration. Consider preallocating for speed. L 23 (C 44-49): Use STRCMPI(str1,str2) instead of using UPPER/LOWER in a call to STRCMP. L 27 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)). L 33 (C 13-16): Variable appears to change size on every loop iteration. Consider preallocating for speed. L 33 (C 24-31): Use dynamic fieldnames with structures instead of GETFIELD. L 38 (C 17-45): To improve performance, use 'isscalar' instead of length comparison. L 39 (C 17-45): To improve performance, use 'isscalar' instead of length comparison. L 40 (C 17-45): To improve performance, use 'isscalar' instead of length comparison. L 42 (C 13-15): Variable appears to change size on every loop iteration. Consider preallocating for speed. L 44 (C 13-15): Variable appears to change size on every loop iteration. Consider preallocating for speed. L 47 (C 21): A '[' might be missing a closing ']', causing invalid syntax at ')'. L 47 (C 51): A '(' might be missing a closing ')', causing invalid syntax at ';'. L 47 (C 54): Parse error at ']': usage might be invalid MATLAB syntax. L 48 (C 17): Add a semicolon after the statement to hide the output (in a function).
サンプル ファイル lengthofline.m
に対して checkcode
を実行します。メッセージ ID を含めて、結果を構造体に格納します。
info = checkcode('lengthofline', '-id')
info=16×1 struct array with fields:
id
message
fix
line
column
最初のメッセージの値を表示します。
info(1)
ans = struct with fields:
id: 'NASGU'
message: 'Value assigned to variable might be unused.'
fix: 0
line: 21
column: [1 9]
'-modcyc'
オプションを使用して、例のファイル lengthofline.m
に対して checkcode
を実行します。MATLAB® は lengthofline.m
に関するファイルの修正循環的複雑度とコード アナライザー メッセージを表示します。
checkcode('lengthofline', '-modcyc')
L 1 (C 23-34): The modified cyclomatic complexity of 'lengthofline' is 12. L 21 (C 1-9): Value assigned to variable might be unused. L 22 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)). L 23 (C 5-11): Variable appears to change size on every loop iteration. Consider preallocating for speed. L 23 (C 44-49): Use STRCMPI(str1,str2) instead of using UPPER/LOWER in a call to STRCMP. L 27 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)). L 33 (C 13-16): Variable appears to change size on every loop iteration. Consider preallocating for speed. L 33 (C 24-31): Use dynamic fieldnames with structures instead of GETFIELD. L 38 (C 17-45): To improve performance, use 'isscalar' instead of length comparison. L 39 (C 17-45): To improve performance, use 'isscalar' instead of length comparison. L 40 (C 17-45): To improve performance, use 'isscalar' instead of length comparison. L 42 (C 13-15): Variable appears to change size on every loop iteration. Consider preallocating for speed. L 44 (C 13-15): Variable appears to change size on every loop iteration. Consider preallocating for speed. L 47 (C 21): A '[' might be missing a closing ']', causing invalid syntax at ')'. L 47 (C 51): A '(' might be missing a closing ')', causing invalid syntax at ';'. L 47 (C 54): Parse error at ']': usage might be invalid MATLAB syntax. L 48 (C 17): Add a semicolon after the statement to hide the output (in a function).
設定ファイルを作成して指定することで、特定のメッセージを非表示にします。たとえば、ファイル lengthofline.m
には OR
演算子として || の代わりに | を使用する行がいくつか含まれています。既定で、checkcode
はこれらの行にフラグを設定します。
checkcode('lengthofline')
L 21 (C 1-9): Value assigned to variable might be unused. L 22 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)). L 23 (C 5-11): Variable appears to change size on every loop iteration. Consider preallocating for speed. L 23 (C 44-49): Use STRCMPI(str1,str2) instead of using UPPER/LOWER in a call to STRCMP. L 27 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)). L 33 (C 13-16): Variable appears to change size on every loop iteration. Consider preallocating for speed. L 33 (C 24-31): Use dynamic fieldnames with structures instead of GETFIELD. L 38 (C 17-45): To improve performance, use 'isscalar' instead of length comparison. L 39 (C 17-45): To improve performance, use 'isscalar' instead of length comparison. L 40 (C 17-45): To improve performance, use 'isscalar' instead of length comparison. L 42 (C 13-15): Variable appears to change size on every loop iteration. Consider preallocating for speed. L 44 (C 13-15): Variable appears to change size on every loop iteration. Consider preallocating for speed. L 47 (C 21): A '[' might be missing a closing ']', causing invalid syntax at ')'. L 47 (C 51): A '(' might be missing a closing ')', causing invalid syntax at ';'. L 47 (C 54): Parse error at ']': usage might be invalid MATLAB syntax. L 48 (C 17): Add a semicolon after the statement to hide the output (in a function).
OR
演算子として | が使用されていることを示すメッセージを非表示にする設定ファイルを作成します。
[ホーム] タブの [環境] セクションで [基本設定] ボタンをクリックします。
左のペインで [コード アナライザー] を選択します。
[既定の設定] の下の [外観と可読性] セクションで、[(スカラーの) 条件文の OR 演算子として | の代わりに || を使用してください。] というメッセージをオフにします。
ファイル名として
mysettings.txt
を入力し、現在のフォルダーに保存します。[キャンセル] ボタンをクリックして、アクティブな設定を変更せずに [基本設定] パネルを閉じます。
カスタム設定ファイル mysettings.txt
を使用して、サンプル ファイルに対して checkcode
を実行します。メッセージ「 (スカラーの) 条件文の OR 演算子として | の代わりに || を使用してください。」は抑制され、それ以降、メッセージのリストに表示されなくなります。
checkcode('lengthofline','-config=mysettings.txt')
L 21 (C 1-9): Value assigned to variable might be unused. L 22 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)). L 23 (C 5-11): Variable appears to change size on every loop iteration. Consider preallocating for speed. L 23 (C 44-49): Use STRCMPI(str1,str2) instead of using UPPER/LOWER in a call to STRCMP. L 27 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)). L 33 (C 13-16): Variable appears to change size on every loop iteration. Consider preallocating for speed. L 33 (C 24-31): Use dynamic fieldnames with structures instead of GETFIELD. L 38 (C 17-45): To improve performance, use 'isscalar' instead of length comparison. L 39 (C 17-45): To improve performance, use 'isscalar' instead of length comparison. L 40 (C 17-45): To improve performance, use 'isscalar' instead of length comparison. L 42 (C 13-15): Variable appears to change size on every loop iteration. Consider preallocating for speed. L 44 (C 13-15): Variable appears to change size on every loop iteration. Consider preallocating for speed. L 47 (C 21): A '[' might be missing a closing ']', causing invalid syntax at ')'. L 47 (C 51): A '(' might be missing a closing ')', causing invalid syntax at ';'. L 47 (C 54): Parse error at ']': usage might be invalid MATLAB syntax. L 48 (C 17): Add a semicolon after the statement to hide the output (in a function).
入力引数
ファイル名。文字ベクトル、string 配列、または文字ベクトルの cell 配列として指定します。ファイル名には部分パスを含めることができますが、検索パス上のフォルダーまたは現在のフォルダー内になければなりません。
filename
が非スカラーの string 配列または文字ベクトルの cell 配列である場合、MATLAB® は各ファイルの情報を表示します。
メモ
ファイル名の cell 配列と文字配列を連結することはできません。たとえば、入力として {'lengthofline', 'buggy'}, 'collatz'
を指定することはできません。
例: 'lengthofline'
例: {'lengthofline', 'buggy'}
データ型: char
| string
表示オプション。次の値のいずれかとして指定します。オプションの順番は任意です。
オプション | 説明 |
---|---|
'-id' | メッセージ ID を要求します。ここで ID は文字ベクトルです。構造体へ返した場合、出力は id フィールドももちます。これは、メッセージに付属した ID です。 |
'-fullpath' | 入力されたファイル名が絶対パスであると仮定します。したがって checkcode はファイルの位置特定を試行しません。 |
'-notok' |
|
'-cyc' | ファイル内にある各関数の McCabe の循環的複雑度を表示します。一般に、複雑度の値が低いほど、プログラムは理解しやすく変更も容易です。複雑度の値が高いほど、プログラムにエラーが含まれる可能性が高いことは証拠により示唆されています。関数の複雑度を下げるには、より小さくて単純な関数に分割します。複雑度の値が 10 を超える場合、プログラムの分割が推奨されることもあります。 循環的複雑度の詳細については、循環的複雑度を使用したコードの複雑度の測定を参照してください。 |
'-modcyc' | ファイル内にある各関数の修正循環的複雑度を表示します。関数の修正循環的複雑度は、McCabe の循環的複雑度と等しくなりますが、1 つの違いがあります。McCabe の循環的複雑度では、 循環的複雑度の詳細については、循環的複雑度を使用したコードの複雑度の測定を参照してください。 |
| 指定した設定ファイルで既定のアクティブな設定ファイルをオーバーライドします。指定したファイルが現在のフォルダーにない場合は、ファイルへの絶対パスを指定します。 設定ファイル作成の詳細については、コード アナライザー メッセージ設定の保存と再利用を参照してください。無効なファイルが指定された場合、関数 設定ファイルをすべて無視して、出荷時の既定の設定を使用するには、 |
出力引数
メッセージの情報。n
行 1
列の構造体配列として返されます。ここで、n
は checkcode
コマンドで返されるメッセージの数です。複数のファイル名が入力された場合、あるいは cell 配列が入力された場合、info
は構造体の cell 配列を含みます。
フィールド | 説明 |
---|---|
| コード解析が検出した問題がありそうな構造を説明するメッセージ。 |
| 行番号のベクトル。ファイル内でメッセージが適用される行を示します。 |
| 列番号からなる 2 列配列 (列の範囲)。ファイル内でメッセージが適用される列を示します。配列の最初の列は、メッセージが開始されるエディターの列を指定します。配列の 2 番目の列は、メッセージが終了するエディターの列を指定します。2 列配列内で、メッセージの各出現箇所につき 1 行が使用されます。 |
メッセージの情報。文字ベクトルとして返されます。複数のファイル名が入力された場合、あるいは cell 配列が入力された場合、msg
は文字ベクトルを含み、各ファイルの情報は 10 個の等号文字、1 つのスペース、ファイル名、1 つのスペースおよび 10 個の等号文字で区切られます。
例: ========== C:\MyMatlabFiles\buggy.m ==========
ファイルの絶対パス。文字ベクトルの cell 配列として指定します。MATLAB は、指定された入力ファイルと同じ順序で filepaths
をリストします。
ヒント
コード行を無視するようコード アナライザーに強制するには、その行の末尾に %#ok
を使用します。このタグの後にコメントを追加できます。
unsuppressed1 = 10 % This line will get caught suppressed2 = 20 %#ok This line will not get caught suppressed3 = 30 %#ok This line will not get caught
拡張機能
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
バージョン履歴
R2011b で導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)