exponenta event banner

mlint

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

Совместимость

Примечание

mlint не рекомендуется. Использовать checkcode вместо этого.

Альтернативы

Сведения об использовании графического пользовательского интерфейса анализатора кода см. в разделе Проверка кода на наличие ошибок и предупреждений.

Синтаксис

mlint('filename')
mlint('filename','-config=settings.txt')
mlint('filename','-config=factory')
inform=mlint('filename','-struct')
msg=mlint('filename','-string')
[inform,filepaths]=mlint('filename')
inform=mlint('filename','-id')
inform=mlint('filename','-fullpath')
inform=mlint('filename','-notok')
mlint('filename','-cyc')
mlint('filename','-codegen')
mlint('filename','-eml')

Описание

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

Определить filename как один или более символьных векторов или строковых массивов, или как массив ячеек символьных векторов. Если filename задает несколько символьных векторов или строковых массивов, или если filename является нескалярным строковым массивом или массивом ячеек символьных векторов, MATLAB ® отображает информацию для каждого файла. Нельзя комбинировать массивы ячеек символьных векторов и символьные векторы имен файлов. Например, нельзя иметь{'lengthofline', 'buggy'}, 'collatz' в качестве входных данных.

mlint('filename','-config=settings.txt') переопределяет файл активных настроек по умолчанию с настройками, которые включают или подавляют сообщения, как указано в указанном settings.txt файл.

Примечание

При использовании необходимо указать полный путь к settings.txt файл, указанный с помощью -config вариант.

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

mlint('filename','-config=factory') игнорирует все файлы настроек и использует настройки по умолчанию.

inform=mlint('filename','-struct') возвращает информацию в массиве структуры, длина которого является количеством найденных сообщений. Структура имеет следующие поля.

Область

Описание

message

Сообщение с описанием подозрительной конструкции, обнаруженной при анализе кода.

line

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

column

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

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

msg=mlint('filename','-string') возвращает информацию в виде символьного вектора msg. Если в качестве входных данных указано несколько имен файлов, msg содержит информацию для каждого файла, разделенную 10 знаками равенства (=), пробел, имя файла, пробел и 10 знаков равенства.

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

[inform,filepaths]=mlint('filename') дополнительно возвращает filepathsабсолютные пути к именам файлов в том же порядке, в котором они были заданы.

inform=mlint('filename','-id') запрашивает идентификатор сообщения, где ID является символьным вектором формы ABC.... При возврате в структуру выходные данные также имеют id , который представляет собой идентификатор, связанный с сообщением.

inform=mlint('filename','-fullpath') предполагает, что имена входных файлов являются абсолютными путями, так что mlint не пытается найти их.

inform=mlint('filename','-notok') пробеги mlint для всех строк в filename, даже те строки, которые заканчиваются mlint директива о подавлении, %#ok.

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

mlint('filename','-codegen') включает генерацию сообщений для отображения в окне команд.

mlint('filename','-eml') '-eml' не рекомендуется. Использовать '-codegen' вместо этого.

Примеры

В следующих примерах используется lengthofline.m, который представляет собой образец файла с кодом MATLAB, который может быть улучшен. Вы можете найти его в matlabroot/help/techdoc/matlab_env/examples. Если требуется выполнить примеры, сохраните копию lengthofline.m в расположение на пути MATLAB.

Запуск mlint в файле без параметров

Бежать mlint в файле примера, lengthofline.m, выполнить

mlint('lengthofline')

MATLAB отображает сообщения M-Lint для lengthofline.m в окне команд:

L 22 (C 1-9): The value assigned here to variable 'nothandle' might never be used.
L 23 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)).
L 24 (C 5-11): 'notline' might be growing inside a loop. Consider preallocating for speed.
L 24 (C 44-49): Use STRCMPI(str1,str2) instead of using LOWER in a call to STRCMP.
L 28 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)).
L 34 (C 13-16): 'data' might be growing inside a loop. Consider preallocating for speed.
L 34 (C 24-31): Use dynamic fieldnames with structures instead of GETFIELD.
                Type 'doc struct' for more information.
L 38 (C 29): Use || instead of | as the OR operator in (scalar) conditional statements.
L 39 (C 47): Use || instead of | as the OR operator in (scalar) conditional statements.
L 40 (C 47): Use || instead of | as the OR operator in (scalar) conditional statements.
L 42 (C 13-16): 'data' might be growing inside a loop. Consider preallocating for speed.
L 43 (C 13-15): 'dim' might be growing inside a loop. Consider preallocating for speed.
L 45 (C 13-15): 'dim' might be growing inside a loop.Consider preallocating for speed.
L 48 (C 52): There may be a parenthesis imbalance around here.
L 48 (C 53): There may be a parenthesis imbalance around here.
L 48 (C 54): There may be a parenthesis imbalance around here.
L 48 (C 55): There may be a parenthesis imbalance around here.
L 49 (C 17): Terminate statement with semicolon to suppress output (in functions).
L 49 (C 23): Use of brackets [] is unnecessary. Use parentheses to group, if needed.

Дополнительные сведения об этих сообщениях и усовершенствовании кода см. в разделе Изменение кода на основе сообщений анализатора кода в документации MATLAB Desktop Tools and Development Environment.

Запуск mlint с опциями для отображения идентификаторов и возврата результатов в структуру

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

inform=mlint('lengthofline', '-id')

Возврат MATLAB

inform = 

19x1 struct array with fields:
    message
    line
    column
    id

Чтобы просмотреть значения для первого сообщения, выполните команду

inform(1)

Дисплеи MATLAB

ans = 

    message: 'The value assigned here to variable 'nothandle' might never be used.'
       line: 22
     column: [1 9]
         id: 'NASGU'

Здесь сообщение для значения, которое появляется в строке 22, которая продолжается от столбца 1-9 в файле.NASGU - идентификатор сообщения. 'The value assigned here to variable 'nothandle' might never be used.'.

Отображение сложности McCable с помощью mlint

Для отображения сложности McCabe файла кода MATLAB выполните команду mlint с -cyc , как показано в следующем примере (при условии сохранения lengthofline.m в локальную папку).

mlint lengthofline.m -cyc

Результаты, отображаемые в окне команд, показывают сложность McCabe файла, а затем сообщения M-Lint, как показано ниже:

L 1 (C 23-34): The McCabe complexity of 'lengthofline' is 12.
L 22 (C 1-9): The value assigned here to variable 'nothandle' might never be used.
L 23 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)).
L 24 (C 5-11): 'notline' might be growing inside a loop. Consider preallocating for speed.
L 24 (C 44-49): Use STRCMPI(str1,str2) instead of using UPPER/LOWER in a call to STRCMP.
L 28 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)).
L 34 (C 13-16): 'data' might be growing inside a loop. Consider preallocating for speed.
L 34 (C 24-31): Use dynamic fieldnames with structures instead of GETFIELD. Type 'doc struct'
 for more information.
L 38 (C 29): Use || instead of | as the OR operator in (scalar) conditional statements.
L 39 (C 47): Use || instead of | as the OR operator in (scalar) conditional statements.
L 40 (C 47): Use || instead of | as the OR operator in (scalar) conditional statements.
L 42 (C 13-16): 'data' might be growing inside a loop. Consider preallocating for speed.
L 43 (C 13-15): 'dim' might be growing inside a loop. Consider preallocating for speed.
L 45 (C 13-15): 'dim' might be growing inside a loop. Consider preallocating for speed.
L 48 (C 52): There may be a parenthesis imbalance around here.
L 48 (C 53): There may be a parenthesis imbalance around here.
L 48 (C 54): There may be a parenthesis imbalance around here.
L 48 (C 55): There may be a parenthesis imbalance around here.
L 49 (C 17): Terminate statement with semicolon to suppress output (in functions).
L 49 (C 23): Use of brackets [] is unnecessary.  Use parentheses to group, if needed.

См. также

mlintrpt, profile

Как сделать

Представлен до R2006a