主要内容

checkcode

检查MATLAB为可能的问题编写代码文件

描述

例子

checkcode (文件名显示关于文件名报告代码改进的潜在问题和机会。这些消息有时被称为代码分析器消息。消息中的行号是一个超链接,您可以单击它在编辑器中直接转到该行。的确切文本checkcode消息在不同版本之间可能会有一些更改。

checkcode (文件名1、……文件名N)显示每个指定的消息文件名

例子

checkcode (___选项1、……选项N)根据指定的选项标志修改返回的消息。例如,指定“-modcyc”请求随每条消息返回修改后的圈复杂度。您可以使用前面语法中的任何输入参数指定选项。

例子

信息= checkcode (___“结构”)返回信息为n——- - - - - -1结构数组,其中n找到的消息数。

味精= checkcode (___, '字符串')以字符向量的形式返回信息。

如果省略“结构”“字符串”参数并指定输出参数时,默认行为为“结构”

___filepaths= checkcode(___同样的回报filepaths,文件名的绝对路径。你可以指定filepaths用任何一个“结构”“字符串”选项。

例子

全部折叠

运行checkcode在示例文件中lengthofline.m.MATLAB®显示代码分析器消息lengthofline.m在命令窗口。

checkcode (“lengthofline”
l21 (C 1-9):赋给变量的值可能未使用。L 22 (C 12-15): NUMEL(x)通常比PROD(SIZE(x))快。l23 (C 5-11):变量在每次循环迭代时都改变大小。考虑为速度进行预分配。L 23 (C 44-49):在调用STRCMP时使用STRCMPI(str1,str2)而不是使用UPPER/LOWER。L 27 (C 12-15): NUMEL(x)通常比PROD(SIZE(x))快。l33 (C 13-16):变量在每次循环迭代时都改变大小。考虑为速度进行预分配。l33 (C 24-31):在结构中使用动态字段名而不是GETFIELD。L 37 (C 29):当两个参数都是数值标量时,考虑将|替换为||以提高性能。 L 38 (C 47): When both arguments are numeric scalars, consider replacing | with || for performance. L 39 (C 47): When both arguments are numeric scalars, consider replacing | with || for performance. 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).

运行checkcode在示例文件中lengthofline.m.包括消息id并将结果存储在结构中。

信息= checkcode(“lengthofline”“id”
信息=16×1包含字段的struct数组:Id消息固定行列

查看第一条消息的值。

信息(1)
ans =带字段的结构:id: 'NASGU'消息:'分配给变量的值可能未使用。修复:0行:21列:[1 9]

运行checkcode在示例文件中lengthofline.m使用“-modcyc”选择。MATLAB®显示修改后的文件圈复杂度,然后是代码分析器的消息lengthofline.m

checkcode (“lengthofline”“-modcyc”
L 1 (C 23-34): 'lengthofline'的修正圈复杂度为12。l21 (C 1-9):赋给变量的值可能未使用。L 22 (C 12-15): NUMEL(x)通常比PROD(SIZE(x))快。l23 (C 5-11):变量在每次循环迭代时都改变大小。考虑为速度进行预分配。L 23 (C 44-49):在调用STRCMP时使用STRCMPI(str1,str2)而不是使用UPPER/LOWER。L 27 (C 12-15): NUMEL(x)通常比PROD(SIZE(x))快。l33 (C 13-16):变量在每次循环迭代时都改变大小。考虑为速度进行预分配。l33 (C 24-31):在结构中使用动态字段名而不是GETFIELD。 L 37 (C 29): When both arguments are numeric scalars, consider replacing | with || for performance. L 38 (C 47): When both arguments are numeric scalars, consider replacing | with || for performance. L 39 (C 47): When both arguments are numeric scalars, consider replacing | with || for performance. 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标记这些行。

checkcode (“lengthofline”
l21 (C 1-9):赋给变量的值可能未使用。L 22 (C 12-15): NUMEL(x)通常比PROD(SIZE(x))快。l23 (C 5-11):变量在每次循环迭代时都改变大小。考虑为速度进行预分配。L 23 (C 44-49):在调用STRCMP时使用STRCMPI(str1,str2)而不是使用UPPER/LOWER。L 27 (C 12-15): NUMEL(x)通常比PROD(SIZE(x))快。l33 (C 13-16):变量在每次循环迭代时都改变大小。考虑为速度进行预分配。l33 (C 24-31):在结构中使用动态字段名而不是GETFIELD。L 37 (C 29):当两个参数都是数值标量时,考虑将|替换为||以提高性能。 L 38 (C 47): When both arguments are numeric scalars, consider replacing | with || for performance. L 39 (C 47): When both arguments are numeric scalars, consider replacing | with || for performance. 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).

创建一个设置文件,该文件禁止标记使用|作为操作符。

  1. 首页选项卡,在环境部分,单击首选项按钮。

  2. 选择代码分析器在左边的窗格中。

  3. 默认设置,在美学和可读性节,清除消息使用而不是|作为(标量)条件语句中的OR运算符

  4. 输入mysettings.txt作为文件名,并保存到您的当前文件夹。

  5. 按下取消按钮,在不更改活动设置的情况下退出首选项面板。

运行checkcode在示例文件上使用自定义设置文件mysettings.txt.的消息使用而不是|作为(标量)条件语句中的OR运算符被抑制,并且在消息列表中不再可见。

checkcode (“lengthofline”“配置= mysettings.txt”
l21 (C 1-9):赋给变量的值可能未使用。L 22 (C 12-15): NUMEL(x)通常比PROD(SIZE(x))快。l23 (C 5-11):变量在每次循环迭代时都改变大小。考虑为速度进行预分配。L 23 (C 44-49):在调用STRCMP时使用STRCMPI(str1,str2)而不是使用UPPER/LOWER。L 27 (C 12-15): NUMEL(x)通常比PROD(SIZE(x))快。l33 (C 13-16):变量在每次循环迭代时都改变大小。考虑为速度进行预分配。l33 (C 24-31):在结构中使用动态字段名而不是GETFIELD。L 42 (C 13-15):变量似乎在每次循环迭代中改变大小。 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).

输入参数

全部折叠

文件名,指定为字符向量、字符串数组或字符向量的单元格数组。文件名可以包含部分路径,但必须位于搜索路径上的文件夹或当前文件夹中。

如果文件名是一个非标量字符串数组或单元格数组的字符向量,MATLAB®显示每个文件的信息。

请注意

不能将文件名的单元格数组和字符数组组合在一起。例如,你不可能拥有{' lengtholine ', 'buggy'}, 'collatz'作为输入。

例子:“lengthofline”

例子:{“lengthofline”,“车”}

数据类型:字符|字符串

显示选项,指定为这些值之一。选项可以以任何顺序出现。

选项 描述
“id” 请求消息ID,其中ID是字符向量。返回到结构时,输出也具有id字段,它是与消息关联的ID。
“-fullpath” 假设输入文件名是绝对路径,那么checkcode不试图定位他们。
“-notok”

运行checkcode对于所有的行文件名,即使是那些以。结尾的行checkcode抑制指令,% #好吧

有关% #好吧以及从程序中抑制消息,请参见调整代码分析器消息指示器和消息

“本体” 显示文件中每个函数的麦凯布圈复杂度。一般来说,较低的复杂度值表示程序更容易理解和修改。有证据表明,具有较高复杂性值的程序更有可能包含错误。通常,您可以通过将函数划分为更小、更简单的函数来降低其复杂性。有些人主张拆分复杂度值超过10的程序。
“-modcyc” 显示文件中每个函数修改后的圈复杂度。函数的修正圈复杂度等于麦凯布圈复杂度,只有一个区别。麦凯布圈复杂度计算每个个体情况下在一个开关语句作为1,而修改圈复杂度计算整个开关语句为1。一般来说,开关语句比嵌套简单if-elseif-else语句,因此,修改圈复杂度通常被认为是更好的代码复杂度度量。

' config =settingsfile

“配置=工厂”

使用指定的设置文件覆盖默认的活动设置文件。如果指定的文件不在当前文件夹中,请提供该文件的完整路径。

有关创建设置文件的信息,请参见保存和重用代码分析器消息设置.如果指定的文件无效,checkcode返回一条消息,指示它无法打开或读取指定的文件。这样的话,checkcode使用出厂默认设置。

若要忽略所有设置文件并使用出厂默认首选项设置,请指定“配置=工厂”

输出参数

全部折叠

消息信息,返回为n——- - - - - -1结构数组,其中n返回的消息数是checkcode命令。如果指定多个文件名作为输入,或者指定单元格数组作为输入,信息包含结构单元格数组。

描述

消息

描述代码分析捕获的可疑构造的消息。

行号向量,指示消息应用到文件的哪些行。

列号(列扩展区)的两列数组,指示消息应用于文件的哪些列。数组的第一列指定Editor中消息开始的列。数组的第二列指定Editor中消息结束的列。在两列数组中,每出现一条消息都有一行。

消息信息,作为字符向量返回。如果指定多个文件名作为输入,或者指定单元格数组作为输入,味精包含一个字符向量,其中每个文件的信息由10个等号字符、一个空格、文件名、一个空格和10个等号字符分隔。

例子:========== C: \ MyMatlabFiles \车。米 ==========

文件的绝对路径,指定为字符向量的单元格数组。MATLAB列出了filepaths与指定的输入文件相同的顺序。

提示

若要强制代码分析程序忽略一行代码,请使用% #好吧在队伍的最后。您可以在标记之后添加注释。

unsuppressed1 = 10%这一行会被捕获suppressed2 = 20% #ok这一行不会被捕获suppressed3 = 30% #ok这一行不会被捕获

扩展功能

版本历史

在R2011b中引入