mlint

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

Примечание

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

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

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

Синтаксис

mlint ('имя файла')
mlint ('имя файла', '-config=settings. txt
mlint ('имя файла', '-config=factory')
inform=mlint ('имя файла', '-struct')
msg=mlint ('имя файла', '-строка')
[сообщите, filepaths] =mlint ('имя файла')
inform=mlint ('имя файла', '-id')
inform=mlint ('имя файла', '-полный-путь')
inform=mlint ('имя файла', '-notok')
mlint ('имя файла', '-cyc')
mlint ('имя файла', '-codegen')
mlint ('имя файла', '-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') возвращает информацию в массиве структур, длина которого является количеством найденных сообщений. Структура имеет поля, которые следуют.

Поле

Описание

сообщение

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

строка

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

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, которое является 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

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