mlint

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

Примечание

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

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

Для получения информации об использовании графического интерфейса пользователя к Анализатору кода смотрите Контрольный код для Ошибок и Предупреждений.

Синтаксис

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