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

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

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

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

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

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

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

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

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

mlint('filename','-cyc') отображает сложность Маккейба (также называемый цикломатической сложностью) каждой функции в файле. Более высокие значения сложности Маккейба указывают на более высокую сложность, и существует некоторое доказательство, чтобы предположить, что программы с более высокими значениями сложности, более вероятно, будут содержать ошибки. Часто, можно понизить сложность функции путем деления его на меньшие, более простые функции. В общем случае меньшие значения сложности указывают на программы, которые легче изучить и изменить. Некоторые люди защищают разделять программы, которые имеют сложность, оценивающую более чем 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 и документации Среды разработки.

Выполнение 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 ID для сообщения 'The value assigned here to variable 'nothandle' might never be used.'.

Отображение Сложности Маккейба с mlint

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

mlint lengthofline.m -cyc

Результаты, отображенные в Командном окне, показывают сложность Маккейба файла, сопровождаемого сообщениями 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