主要内容

校验码

检查MATLAB可能出现问题的代码文件

描述

例子

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

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

例子

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

例子

信息= checkcode (___,'-struct')以。的形式返回信息n-借-1结构数组,n找到的消息数。

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

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

___filepaths]=校验码(___同样的回报filepaths,文件名的绝对路径。您可以指定filepaths用的“-struct”“字符串”选项。

例子

全部崩溃

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

checkcode ("朗托弗林"
L 21 (C 1-9):赋给变量'nothandle'的值可能未使用。l22 (C 12-15): NUMEL(x)通常比PROD(SIZE(x))快。L 23 (c5 -11):变量'notline'似乎在每次循环迭代时改变大小。考虑提前分配。L 23 (C 44-49):在调用STRCMP时使用STRCMPI(str1,str2)而不是使用UPPER/LOWER。l27 (C 12-15): NUMEL(x)通常比PROD(SIZE(x))快。L 33 (c13 -16):变量'data'似乎在每次循环迭代中改变大小。考虑提前分配。L 33 (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): The variable 'dim' appears to change size on every loop iteration. Consider preallocating for speed. L 44 (C 13-15): The variable 'dim' 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): Terminate statement with semicolon to suppress output (in functions). L 48 (C 23): If you intend to specify expression precedence, use parentheses () instead of brackets [].

运行校验码关于示例文件lengthofline.m.包含消息id并将结果存储在结构中。

信息=校验码("朗托弗林"“-id”
信息=带字段的17×1结构数组:Id消息固定行列

查看第一个消息的值

信息(1)
ans =带字段的结构:id: 'NASGU'消息:'分配给变量'nothandle的值可能未被使用。' fix: 0 line: 21 column: [1 9]

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

checkcode ("朗托弗林"“-modcyc”
L 1 (c23 -34):“长线”的修正圈复杂度是12。L 21 (C 1-9):赋给变量'nothandle'的值可能未使用。l22 (C 12-15): NUMEL(x)通常比PROD(SIZE(x))快。L 23 (c5 -11):变量'notline'似乎在每次循环迭代时改变大小。考虑提前分配。L 23 (C 44-49):在调用STRCMP时使用STRCMPI(str1,str2)而不是使用UPPER/LOWER。l27 (C 12-15): NUMEL(x)通常比PROD(SIZE(x))快。L 33 (c13 -16):变量'data'似乎在每次循环迭代中改变大小。考虑提前分配。L 33 (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): The variable 'dim' appears to change size on every loop iteration. Consider preallocating for speed. L 44 (C 13-15): The variable 'dim' 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): Terminate statement with semicolon to suppress output (in functions). L 48 (C 23): If you intend to specify expression precedence, use parentheses () instead of brackets [].

通过创建和指定设置文件来抑制特定消息。例如lengthofline.m包含使用|而不是||作为操作符。默认情况下,校验码这些线。

checkcode ("朗托弗林"
L 21 (C 1-9):赋给变量'nothandle'的值可能未使用。l22 (C 12-15): NUMEL(x)通常比PROD(SIZE(x))快。L 23 (c5 -11):变量'notline'似乎在每次循环迭代时改变大小。考虑提前分配。L 23 (C 44-49):在调用STRCMP时使用STRCMPI(str1,str2)而不是使用UPPER/LOWER。l27 (C 12-15): NUMEL(x)通常比PROD(SIZE(x))快。L 33 (c13 -16):变量'data'似乎在每次循环迭代中改变大小。考虑提前分配。L 33 (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): The variable 'dim' appears to change size on every loop iteration. Consider preallocating for speed. L 44 (C 13-15): The variable 'dim' 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): Terminate statement with semicolon to suppress output (in functions). L 48 (C 23): If you intend to specify expression precedence, use parentheses () instead of brackets [].

创建一个设置文件,该文件禁止显示将|用作操作符。

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

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

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

  4. 输入mysettings.txt,并将其保存到当前文件夹中。

  5. 取消按钮退出首选项面板而不改变活动设置。

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

checkcode ("朗托弗林"'-config=mysettings.txt'
L 21(C1-9):分配给变量“Nththle”的值可能未被使用。L 22(C 12-15):NUMEL(x)通常比PROD(大小(x))快。L 23(C5-11):变量“NoTrand”似乎在每个循环迭代中改变大小。考虑预分配速度。L 23(C 44-49):使用STRCPMPI(STR1,STR2)不是在调用StrucM.L 27(C12-15)中使用上/下:NoMeL(x)通常比PROD(size(x))快。L 33(C13-16):变量“数据”在每个循环迭代中都出现改变大小。考虑预分配速度。L 33(CC-31 31):使用动态字段名称而不是GETFIEL.L 42(C13-15)。变量“DIM”似乎在每个循环迭代中改变大小。考虑预分配为速度。L 44(C13-15):变量“DIM”似乎在每个循环迭代中改变大小。考虑预分配为速度。L 47(C 21):a’['可能丢失一个关闭' ],导致“无效的语法在''”。L 47(c 51):a′(‘可能缺少一个闭合’),导致“;”处的语法无效。L 47(C 54):在“]”处的分析错误:用法可能是无效的MATLAB语法。L 48(C 17):使用分号终止语句以抑制输出(在函数中)。L 48(C 23):如果要指定表达式优先级,请使用括号()而不是括号[]。

输入参数

全部崩溃

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

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

请注意

不能组合单元格数组和文件名的字符数组。例如,你不能{'lengthofline','buggy','collatz'作为输入。

例子:"朗托弗林"

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

数据类型:烧焦|字符串

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

选项 描述
“-id” 请求消息ID,其中ID是字符向量。当返回到结构时,输出还具有id字段,它是与消息关联的ID。
“-完整路径” 假设输入文件名是绝对路径,因此校验码不尝试查找它们。
“-诺托克”

运行校验码对于中的所有行文件名,甚至那些以校验码抑制指令,% #好吧

有关% #好吧以及抑制来自程序内部的消息,参见调整代码分析器消息指示器和消息

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

' config =设置文件

“配置=工厂”

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

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

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

输出参数

全部崩溃

消息信息,以n-借-1结构数组,n返回的消息数是校验码如果指定多个文件名作为输入,或者指定单元格数组作为输入,信息包含结构单元格数组。

描述

消息

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

线

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

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

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

例子:=======C:\MyMatlabFiles\buggy.m==========

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

提示

要强制代码分析器忽略一行代码,请使用% #好吧在这一行的最后。您可以在标签之后添加注释。

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

在R2011b中引入