контрольный код

Проверьте файлы кода MATLAB на возможные проблемы

Синтаксис

checkcode(filename)
checkcode(filename1,...,filenameN)
checkcode(___,option1,...,optionN)
info = checkcode(___,'-struct')
msg = checkcode(___,'-string')
[___, filepaths] = checkcode(___)

Описание

пример

checkcode(filename) отображает сообщения о filename, которые сообщают о потенциальных проблемах и возможностях для улучшения кода. Эти сообщения иногда упоминаются, когда Анализатор кода обменивается сообщениями. Номер строки в сообщении является гиперссылкой, по которой можно кликнуть, чтобы перейти непосредственно к той строке в Редакторе. Точный текст сообщений checkcode подвергается некоторому изменению между версиями.

Сообщения отображений checkcode(filename1,...,filenameN) для каждого задали filename.

пример

checkcode(___,option1,...,optionN) изменяет возвращенные сообщения на основе заданных флагов опции. Например, задайте '-cyc', чтобы запросить сложность Маккейба (также называемый цикломатической сложностью) быть возвращенной с каждым сообщением. Можно задать опции с любым из входных параметров в предыдущих синтаксисах.

пример

info = checkcode(___,'-struct') возвращает информацию как n-by-1 массив структур, где n является количеством найденных сообщений.

msg = checkcode(___,'-string') возвращает информацию как вектор символа.

Если вы не используете аргумент '-struct' или '-string', и вы задаете выходной аргумент, поведением по умолчанию является '-struct'.

[___, filepaths] = checkcode(___) также возвращает filepaths, абсолютные пути к именам файлов. Можно задать filepaths или с '-struct' или с опциями '-string'.

Примеры

свернуть все

Запустите checkcode на файле в качестве примера lengthofline.m m. MATLAB® отображает сообщения Анализатора кода для lengthofline.m в Командном окне.

checkcode('lengthofline')
L 21 (C 1-9): The value assigned to variable 'nothandle' might be unused.
L 22 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)).
L 23 (C 5-11): The variable 'notline' 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): The variable 'data' 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 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 52): Invalid syntax at ';'. A '(' might be missing a closing ')'.
L 47 (C 53): Invalid syntax at ')'. A '[' might be missing a closing ']'.
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): Use of brackets [] is unnecessary. Use parentheses to group, if needed.

Запустите checkcode на файле в качестве примера lengthofline.m m. Включайте идентификаторы сообщений и сохраните результаты в структуре.

info = checkcode('lengthofline', '-id')
info = 17x1 struct array with fields:
    id
    message
    fix
    line
    column

Просмотрите значения для первого сообщения

info(1)
ans = struct with fields:
         id: 'NASGU'
    message: 'The value assigned to variable 'nothandle' might be unused.'
        fix: 0
       line: 21
     column: [1 9]

Запустите checkcode на файле в качестве примера lengthofline.m с помощью опции '-cyc'. MATLAB® отображает сложность Маккейба файла, сопровождаемого сообщениями Анализатора кода для lengthofline.m m.

checkcode('lengthofline', '-cyc')
L 1 (C 23-34): The McCabe complexity of 'lengthofline' is 12.
L 21 (C 1-9): The value assigned to variable 'nothandle' might be unused.
L 22 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)).
L 23 (C 5-11): The variable 'notline' 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): The variable 'data' 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 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 52): Invalid syntax at ';'. A '(' might be missing a closing ')'.
L 47 (C 53): Invalid syntax at ')'. A '[' might be missing a closing ']'.
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): Use of brackets [] is unnecessary. Use parentheses to group, if needed.

Подавите определенные сообщения путем создания и определения файла настроек. Например, файл, lengthofline.m включает несколько строк, которые используют | вместо || как оператор OR. По умолчанию checkcode отмечает эти строки.

checkcode('lengthofline')
L 21 (C 1-9): The value assigned to variable 'nothandle' might be unused.
L 22 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)).
L 23 (C 5-11): The variable 'notline' 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): The variable 'data' 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 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 52): Invalid syntax at ';'. A '(' might be missing a closing ')'.
L 47 (C 53): Invalid syntax at ')'. A '[' might be missing a closing ']'.
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): Use of brackets [] is unnecessary. Use parentheses to group, if needed.

Создайте файл настроек, который подавляет сообщение, отмечающее использование | как оператор OR.

  1. На вкладке Home, в разделе Environment, нажимают кнопку Preferences.

  2. Выберите Code Analyzer на левой панели.

  3. При Настройках по умолчанию, в разделе Aesthetics и Readability, очищают Использование сообщения вместо | как операция ИЛИ в (скалярных) условных операторах.

  4. Введите mysettings.txt как имя файла и сохраните его в свою текущую папку.

  5. Нажмите Кнопку отмены, чтобы выйти из панели настройки, не изменяя активные настройки.

Запустите checkcode на файле в качестве примера с помощью пользовательского файла настроек mysettings.txt txt . Использование сообщения вместо | как операция ИЛИ в (скалярных) условных операторах подавлено и более не видимо в списке сообщений.

checkcode('lengthofline','-config=mysettings.txt')
L 21 (C 1-9): The value assigned to variable 'nothandle' might be unused.
L 22 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)).
L 23 (C 5-11): The variable 'notline' 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): The variable 'data' 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 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 52): Invalid syntax at ';'. A '(' might be missing a closing ')'.
L 47 (C 53): Invalid syntax at ')'. A '[' might be missing a closing ']'.
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): Use of brackets [] is unnecessary. Use parentheses to group, if needed.

Входные параметры

свернуть все

Имя файла, заданное как вектор символа, массив строк или массив ячеек из символьных векторов. Имя файла может включать частичный путь, но должно быть в папке на пути поиска файлов или в текущей папке.

Если filename является нескалярным массивом строк или массивом ячеек из символьных векторов, информацией об отображениях MATLAB® для каждого файла.

Примечание

Вы не можете объединить массивы ячеек и символьные массивы имен файлов. Например, у вас не может быть {'lengthofline', 'buggy'}, 'collatz' как входного параметра.

Пример: 'lengthofline'

Пример: {'lengthofline', 'багги'}

Типы данных: char | string

Параметр экрана, заданный как одно из этих значений. Опции могут появиться в любом порядке.

ОпцияОписание
'-id'Запросите идентификатор сообщения, где ID является вектором символа. Когда возвращено в структуру, вывод также имеет поле id, которое является ID, сопоставленным с сообщением.
FullPath Примите, что входные имена файлов являются абсолютными путями, так, чтобы checkcode не пытался определить местоположение их.
'-notok'

Запустите checkcode для всех строк в filename, даже те строки, которые заканчиваются директивой подавления checkcode, %#ok.

Для получения информации о %#ok и подавляющих сообщениях из вашей программы, смотрите, Настраивают, Анализатор кода передают Индикаторы и сообщения.

'-cyc'Отобразите сложность Маккейба (также называемый цикломатической сложностью) каждой функции в файле. В целом более низкие значения сложности указывают на программы, которые легче понять и изменить. Данные свидетельствуют, что программы с более высокими значениями сложности, более вероятно, будут содержать ошибки. Часто, можно понизить сложность функции путем деления его на меньшие, более простые функции. Некоторые люди защищают разделять программы, которые имеют значение сложности более чем 10.

'-config=settingsfile'

'-config=factory'

Замените активный файл настроек по умолчанию с заданным файлом настроек. Если заданный файл не находится в текущей папке, предоставьте полный путь файлу.

Для получения информации о создании файла настроек смотрите, Сохраняют настройки сообщения анализатора кода и использовать их снова. Если вы задаете недопустимый файл, checkcode возвращает сообщение, указывающее, что он не может открыть или считать файл, который вы задали. В этом случае checkcode использует настройки заводской настройки.

Чтобы проигнорировать все файлы настроек и использовать настройки настройки заводской настройки, задайте '-config=factory'.

Выходные аргументы

свернуть все

Передайте информацию, возвращенную как n-by-1 массив структур, где n является количеством сообщений, возвращенных командой checkcode. Если вы задаете несколько имен файлов, как введено, или если вы задаете массив ячеек, как введено, info содержит массив ячеек структур.

Поле

Описание

сообщение

Сообщение, описывающее подозрительное построение тот анализ кода, отловлено.

строка

Вектор номеров строки, указывая, к которому применяются строки файла сообщение.

column

Массив двух-столбца чисел столбцов (степени столбца), указывая, к которому применяются столбцы файла сообщение. Первый столбец массива задает столбец в Редакторе, где сообщение начинается. Второй столбец массива задает столбец в Редакторе, где сообщение заканчивается. В массиве двух-столбца ссорится каждое возникновение сообщения.

Передайте информацию, возвращенную как вектор символа. Если вы задаете несколько имен файлов, как введено, или если вы задаете массив ячеек, как введено, msg содержит вектор символа, где информация для каждого файла разделяется 10 символами знака "равно", пробелом, именем файла, пробелом и 10 символами знака "равно".

Пример: ========== C:\MyMatlabFiles\buggy.m ==========

Абсолютные пути файлов, заданных как массив ячеек из символьных векторов. 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

Представленный в R2011b

Была ли эта тема полезной?