Директивы MISRA C:2012 и правила

Список и описание MISRA® Инструкции по кодированию C:2012 поддержаны Polyspace®

Polyspace может проверять ваш код по MISRA C:2012, кодирующему правила и некоторые директивы. [1] Подгруппы перечислили карту к различным подмножествам, обрисованным в общих чертах в MISRA C®:2012 инструкций. Используйте Check MISRA C:2012 (-misra3) опция анализа, чтобы активировать подмножества правил. Когда инструкции MISRA C:2012 нарушены, Polyspace предоставляет сообщениям информацию о нарушенном правиле или директиве. Большинство нарушений найдено во время фазы компиляции анализа.

Каждая инструкция категоризирована в одну из этих категорий: обязательный, требуемый, или консультация. Когда вы настраиваете проверку правила, можно выбрать подмножества этих категорий, чтобы проверять. Для автоматически сгенерированного кода некоторые правила изменяют категории, включая к одной дополнительной категории: удобочитаемость. Use generated code requirements (-misra3-agc-mode) опция активирует классификацию для автоматически сгенерированного кода.

Существуют дополнительные подмножества инструкций MISRA C:2012, заданных названными Целями качества программного обеспечения (SQO) Polyspace, которые могут оказать прямое или косвенное влияние на точность ваших результатов. Когда вы настраиваете проверку кода, можно выбрать эти подмножества. Эти подмножества заданы в Подмножествах Цели Качества программного обеспечения (C:2012).

Результаты Polyspace

развернуть все

MISRA C:2012 Dir 1.1Любое заданное реализацией поведение, от которого зависит выход программы, должно быть зарегистрировано и изучено
MISRA C:2012 Dir 2.1Все исходные файлы должны скомпилировать без любых ошибок компиляции
MISRA C:2012 Dir 4.1Отказы во время выполнения должны быть минимизированы
MISRA C:2012 Dir 4.3Ассемблер должен инкапсулироваться и изолироваться
MISRA C:2012 Dir 4.4Разделы кода не должны быть то, " закомментировал"
MISRA C:2012 Dir 4.5Идентификаторы в том же пространстве имен с перекрывающейся видимостью должны быть типографским способом однозначными
MISRA C:2012 Dir 4.6typedefs это указывает, что размер и со знаком должен использоваться вместо основных числовых типов
MISRA C:2012 Dir 4.7Если функция возвратит информацию об ошибке, то та информация об ошибке должна быть протестирована
MISRA C:2012 Dir 4.8Если указатель на структуру или объединение никогда не разыменовывается в модуле перевода, то реализация объекта должна быть скрыта
MISRA C:2012 Dir 4.9Функция должна использоваться в предпочтении к подобному функции макросу, где они являются взаимозаменяемыми
MISRA C:2012 Dir 4.10Меры предосторожности должны быть приняты для того, чтобы предотвратить содержимое заголовочного файла, включаемого несколько раз
MISRA C:2012 Dir 4.11Валидность значений, переданных библиотечным функциям, должна проверяться
MISRA C:2012 Dir 4.12Динамическое выделение памяти не должно использоваться
MISRA C:2012 Dir 4.13Функции, которые спроектированы, чтобы обеспечить операции на ресурсе, должны быть вызваны в соответствующей последовательности
MISRA C:2012 Dir 4.14Валидность значений, полученных от внешних источников, должна проверяться
MISRA C:2012 Rule 1.1Программа не должна содержать нарушения стандартного Синтаксиса C и ограничения, и не должна превышать пределы перевода реализации
MISRA C:2012 Rule 1.2Расширения языка не должны использоваться
MISRA C:2012 Rule 1.3Не должно быть никакого вхождения неопределенного или критического незаданного поведения
MISRA C:2012 Rule 1.4Функции языка на стадии становления не должны быть использованы
MISRA C:2012 Rule 2.1Проект не должен содержать недостижимый код
MISRA C:2012 Rule 2.2Не должно быть никакого мертвого кода
MISRA C:2012 Rule 2.3Проект не должен содержать неиспользованные описания типа
MISRA C:2012 Rule 2.4Проект не должен содержать неиспользованные объявления тега
MISRA C:2012 Rule 2.5Проект не должен содержать неиспользованные макро-объявления
MISRA C:2012 Rule 2.6Функция не должна содержать неиспользованные описания меток
MISRA C:2012 Rule 2.7В функциях не должно быть никаких неиспользованных параметров
MISRA C:2012 Rule 3.1Последовательности символов /* и // не буду использоваться в рамках комментария
MISRA C:2012 Rule 3.2Соединение линии не должно использоваться в // комментарии
MISRA C:2012 Rule 4.1Должны быть отключены восьмеричные и шестнадцатеричные escape-последовательности
MISRA C:2012 Rule 4.2Trigraphs не должен использоваться
MISRA C:2012 Rule 5.1Внешние идентификаторы должны быть отличными
MISRA C:2012 Rule 5.2Идентификаторы, объявленные в том же осциллографе и пространстве имен, должны быть отличными
MISRA C:2012 Rule 5.3Идентификатор, объявленный во внутреннем осциллографе, не должен скрывать идентификатор, объявленный во внешнем осциллографе
MISRA C:2012 Rule 5.4Макро-идентификаторы должны быть отличными
MISRA C:2012 Rule 5.5Идентификаторы должны быть отличны от макро-имен
MISRA C:2012 Rule 5.6Имя определения типа должно быть уникальным идентификатором
MISRA C:2012 Rule 5.7Имя тега должно быть уникальным идентификатором
MISRA C:2012 Rule 5.8Идентификаторы, которые задают объекты или функции с внешним рычажным устройством, должны быть уникальными
MISRA C:2012 Rule 5.9Идентификаторы, которые задают объекты или функции с внутренним рычажным устройством, должны быть уникальными
MISRA C:2012 Rule 6.1Битовые поля должны только быть объявлены с соответствующим типом
MISRA C:2012 Rule 6.2Одноразрядные именованные битовые поля не должны иметь типа со знаком
MISRA C:2012 Rule 7.1Восьмеричные константы не должны использоваться
MISRA C:2012 Rule 7.2Суффикс “u” или “U” должен быть применен ко всем целочисленным константам, которые представлены в типе без знака
MISRA C:2012 Rule 7.3Символ нижнего регистра "l" не должен использоваться в литеральном суффиксе
MISRA C:2012 Rule 7.4Строковый литерал не должен быть присвоен объекту, если тип объекта не будет “указателем на квалифицированный к const char”
MISRA C:2012 Rule 8.1Типы должны быть явным образом заданы
MISRA C:2012 Rule 8.2Функциональные типы должны быть в прототипной форме именованными параметрами
MISRA C:2012 Rule 8.3Все объявления объекта или функции должны использовать те же имена и ввести спецификаторы
MISRA C:2012 Rule 8.4Совместимое объявление должно отобразиться, когда объект или функция с внешним рычажным устройством будут заданы
MISRA C:2012 Rule 8.5Внешний объект или функция должны быть объявлены однажды в одном и только одном файле
MISRA C:2012 Rule 8.6Идентификатор с внешним рычажным устройством должен иметь точно одно внешнее определение
MISRA C:2012 Rule 8.7Функции и объекты не должны быть заданы с внешним рычажным устройством, если на них ссылаются только в одном модуле перевода
MISRA C:2012 Rule 8.8Статический спецификатор класса памяти должен использоваться во всех объявлениях объектов и функций, которые имеют внутреннее рычажное устройство
MISRA C:2012 Rule 8.9Объект должен быть задан в области действия блока, если ее идентификатор только появляется в одной функции
MISRA C:2012 Rule 8.10Подставляемая функция должна быть объявлена со статическим классом памяти
MISRA C:2012 Rule 8.11Когда массив с внешним рычажным устройством объявляется, его размер должен быть явным образом задан
MISRA C:2012 Rule 8.12В рамках списка перечислителей значение неявно заданного постоянного перечисления должно быть уникальным
MISRA C:2012 Rule 8.13Указатель должен указать на квалифицированный к const тип, когда это возможно,
MISRA C:2012 Rule 8.14Ограничить спецификатор типа не должен использоваться
MISRA C:2012 Rule 9.1Значение объекта с длительностью автоматического хранения не должно быть считано, прежде чем это было установлено
MISRA C:2012 Rule 9.2Инициализатор для агрегата или объединения должен быть заключен в фигурные скобки
MISRA C:2012 Rule 9.3Массивы не должны быть частично инициализированы
MISRA C:2012 Rule 9.4Элемент объекта не должен быть инициализирован несколько раз
MISRA C:2012 Rule 9.5Где обозначенные инициализаторы используются, чтобы инициализировать объект массивов, что размер массива должен быть задан явным образом
MISRA C:2012 Rule 10.1Операнды не должны иметь несоответствующего существенного типа
MISRA C:2012 Rule 10.2Выражения чрезвычайно типа символов не должны использоваться неуместно, кроме того, и операции вычитания
MISRA C:2012 Rule 10.3Значение выражения не должно быть присвоено объекту с более узким существенным типом или различной существенной категории типа
MISRA C:2012 Rule 10.4Оба операнда оператора, в котором выполняются обычные арифметические преобразования, должны иметь ту же существенную категорию типа
MISRA C:2012 Rule 10.5Значение выражения не должно быть брошено к несоответствующему существенному типу
MISRA C:2012 Rule 10.6Значение составного выражения не должно быть присвоено объекту с более широким существенным типом
MISRA C:2012 Rule 10.7Если составное выражение будет использоваться в качестве одного операнда оператора, в котором обычные арифметические преобразования выполняются затем, то другой операнд не должен иметь более широкого существенного типа
MISRA C:2012 Rule 10.8Значение составного выражения не должно быть брошено к различной существенной категории типа или более широкому существенному типу
MISRA C:2012 Rule 11.1Преобразования не должны выполняться между указателем на функцию и любым другим типом
MISRA C:2012 Rule 11.2Преобразования не должны выполняться между указателем на неполный тип и любым другим типом
MISRA C:2012 Rule 11.3Бросок не должен выполняться между указателем на тип объекта и указателем на различный тип объекта
MISRA C:2012 Rule 11.4Преобразование не должно быть выполнено между указателем на объект и целочисленным типом
MISRA C:2012 Rule 11.5Преобразование не должно быть выполнено от указателя, чтобы освободить в указатель на объект
MISRA C:2012 Rule 11.6Бросок не должен выполняться между указателем на пустоту и арифметическим типом
MISRA C:2012 Rule 11.7Бросок не должен выполняться между указателем на объект и типом арифметики нецелого числа
MISRA C:2012 Rule 11.8Бросок не должен удалять const или энергозависимую проверку от типа, на который указывает указатель
MISRA C:2012 Rule 11.9Макро-NULL должен быть единственной разрешенной формой целочисленного постоянного нулевого указателя
MISRA C:2012 Rule 12.1Приоритет операторов в рамках выражений должен быть сделан явным
MISRA C:2012 Rule 12.2Правый операнд оператора сдвига должен лечь в нуле области значений меньше, чем ширина в битах существенного типа левого операнда
MISRA C:2012 Rule 12.3Оператор запятой не должен использоваться
MISRA C:2012 Rule 12.4Оценка константных выражений не должна приводить к переносу беззнаковых целых чисел
MISRA C:2012 Rule 12.5sizeof оператор не должен иметь операнда, который является параметром функции, объявленным как “массив типа”
MISRA C:2012 Rule 13.1Списки инициализаторов не должны содержать персистентные побочные эффекты
MISRA C:2012 Rule 13.2Значение выражения и его персистентных побочных эффектов должно быть тем же самым согласно всем разрешенным порядкам оценки
MISRA C:2012 Rule 13.3Полное выражение, содержащее шаг (++) или декремент (-) оператор, не должно иметь никаких других потенциальных побочных эффектов кроме вызванного инкрементным или оператором понижения
MISRA C:2012 Rule 13.4Результат оператора присваивания не должен использоваться
MISRA C:2012 Rule 13.5Правый операнд логического && или || оператор не должен содержать персистентные побочные эффекты
MISRA C:2012 Rule 13.6Операнд sizeof оператора не должен содержать выражение, которое имеет потенциальные побочные эффекты
MISRA C:2012 Rule 14.1Счетчик цикла не должен иметь чрезвычайно типа с плавающей точкой
MISRA C:2012 Rule 14.2Цикл for должен быть правильно построен
MISRA C:2012 Rule 14.3Управление выражениями не должно быть инвариантным
MISRA C:2012 Rule 14.4Выражение управления оператора if и выражение управления оператора цикла должны иметь по существу булев тип
MISRA C:2012 Rule 15.1Оператор перехода не должен использоваться
MISRA C:2012 Rule 15.2Оператор перехода должен перейти к метке, объявленной позже в той же функции
MISRA C:2012 Rule 15.3Любая метка, на которую ссылается оператор перехода, должна быть объявлена в том же блоке, или в любом блоке, заключающем оператор перехода
MISRA C:2012 Rule 15.4Должен быть не больше, чем один оператор завершения, или оператор перехода раньше отключал любой оператор цикла
MISRA C:2012 Rule 15.5Функция должна иметь одну точку выхода в конце
MISRA C:2012 Rule 15.6Тело оператора цикла или оператора выбора должно быть составным оператором
MISRA C:2012 Rule 15.7Все, если … еще, если построения еще должны быть отключены с оператор
MISRA C:2012 Rule 16.1Все операторы switch должны быть правильно построены
MISRA C:2012 Rule 16.2Метка переключателя должна только использоваться, когда наиболее тесно заключающий составной оператор будет телом оператора switch
MISRA C:2012 Rule 16.3Безусловный оператор завершения должен отключить каждый пункт переключателя
MISRA C:2012 Rule 16.4Каждый оператор switch должен иметь метку по умолчанию
MISRA C:2012 Rule 16.5Метка по умолчанию должна появиться или как первое или как последняя метка переключателя оператора switch
MISRA C:2012 Rule 16.6Каждый оператор switch должен иметь по крайней мере два пункта переключателя
MISRA C:2012 Rule 16.7Выражение переключателя не должно иметь по существу булева типа
MISRA C:2012 Rule 17.1Функции <stdarg.h> не должны быть использованы
MISRA C:2012 Rule 17.2Функции не должны вызывать себя, ни один прямо или косвенно
MISRA C:2012 Rule 17.3Функция не должна быть объявлена неявно
MISRA C:2012 Rule 17.4Все выходные пути от функции с непустым типом возврата должны иметь явный оператор возврата с выражением
MISRA C:2012 Rule 17.5Аргумент функции, соответствующий параметру, который, как объявляют, имел тип массива, должен иметь соответствующее число элементов
MISRA C:2012 Rule 17.6Объявление параметра массива не должно содержать статическое ключевое слово между []
MISRA C:2012 Rule 17.7Значение, возвращенное функцией, имеющей непустой тип возврата, должно использоваться
MISRA C:2012 Rule 17.8Параметр функции не должен быть изменен
MISRA C:2012 Rule 18.1Указатель, следующий из арифметики на операнде указателя, должен обратиться к элементу того же массива как тот операнд указателя
MISRA C:2012 Rule 18.2Вычитание между указателями должно только быть применено к указателям, которые обращаются к элементам того же массива
MISRA C:2012 Rule 18.3Операторы отношения>,> =, <и <= не должны быть применены к объектам типа указателя кроме того, где они указывают в тот же объект
MISRA C:2012 Rule 18.4+, - + = и - = операторы не должны быть применены к выражению типа указателя
MISRA C:2012 Rule 18.5Объявления должны содержать не больше, чем два уровня вложения указателя
MISRA C:2012 Rule 18.6Адрес объекта с автоматическим хранением не должен быть скопирован в другой объект, который сохраняется после того, как первый объект прекратил существование
MISRA C:2012 Rule 18.7Члены массива с переменными границами не должны быть объявлены
MISRA C:2012 Rule 18.8Типы массива переменной длины не должны использоваться
MISRA C:2012 Rule 19.1Объект не должен быть присвоен или скопирован в перекрывающийся объект
MISRA C:2012 Rule 19.2Ключевое слово объединения не должно использоваться
MISRA C:2012 Rule 20.1Директивам #include должны только предшествовать директивы препроцессору или комментарии
MISRA C:2012 Rule 20.2', "или \символы и/* или//последовательности символов не должны происходить на имя заголовочного файла
MISRA C:2012 Rule 20.3#include директива должна сопровождаться или <имя файла> или последовательность "имени файла"
MISRA C:2012 Rule 20.4Макрос не должен быть задан с тем же именем как ключевое слово
MISRA C:2012 Rule 20.5#undef не должен использоваться
MISRA C:2012 Rule 20.6Лексемы, которые похожи на директиву предварительной обработки, не должны происходить в макро-аргументе
MISRA C:2012 Rule 20.7Выражения, следующие из расширения макро-параметров, должны быть заключены в круглые скобки
MISRA C:2012 Rule 20.8Выражение управления #if или директивы предварительной обработки #elif должно оценить к 0 или 1
MISRA C:2012 Rule 20.9Все идентификаторы, используемые в выражении управления #if или директив предварительной обработки #elif, должны быть #define’d перед оценкой
MISRA C:2012 Rule 20.10# и ## операторы препроцессора не должны использоваться
MISRA C:2012 Rule 20.11Макро-параметр сразу после # оператора не должен сразу сопровождаться ## оператором
MISRA C:2012 Rule 20.12Макро-параметр, используемый в качестве операнда к # или ## операторам, который самостоятельно удовлетворяет дальнейшей макро-замене, должен только использоваться в качестве операнда к этим операторам
MISRA C:2012 Rule 20.13Линия, первая лексема которой является #, должна быть допустимой директивой предварительной обработки
MISRA C:2012 Rule 20.14Весь #else, #elif и #endif директивы препроцессору должен находиться в том же файле как #if, #ifdef или #ifndef директива, с которой они связаны
MISRA C:2012 Rule 21.1#define и #undef не должны использоваться на зарезервированном идентификаторе или зарезервировали макро-имя
MISRA C:2012 Rule 21.2Зарезервированный идентификатор или зарезервированное макро-имя не должны быть объявлены
MISRA C:2012 Rule 21.3Функции выделения памяти и освобождения <stdlib.h> не буду использоваться
MISRA C:2012 Rule 21.4Стандартный заголовочный файл <setjmp.h> не должен использоваться
MISRA C:2012 Rule 21.5Стандартный заголовочный файл <signal.h> не должен использоваться
MISRA C:2012 Rule 21.6Стандартные функции ввода/вывода Библиотеки не должны использоваться
MISRA C:2012 Rule 21.7Стандартные Библиотечные функции atof, atoi, atol, и atoll функции <stdlib.h> не буду использоваться
MISRA C:2012 Rule 21.8Стандартные Библиотечные функции abortвыход, getnenv и system из <stdlib.h> не буду использоваться
MISRA C:2012 Rule 21.9Стандартные библиотечные функции Библиотеки bsearch и qsort из <stdlib.h> не буду использоваться
MISRA C:2012 Rule 21.10Стандартные функции времени и даты Библиотеки не должны использоваться
MISRA C:2012 Rule 21.11Стандартный заголовочный файл <tgmath.h> не должен использоваться
MISRA C:2012 Rule 21.12Функции обработки исключений <fenv.h> не должен использоваться
MISRA C:2012 Rule 21.13Любое значение передало функции в <ctype.h> будет представимым как unsigned char или быть значением EOF
MISRA C:2012 Rule 21.14Стандартная Библиотечная функция memcmp не буду использоваться, чтобы выдержать сравнение, пустой указатель отключил строки
MISRA C:2012 Rule 21.15Аргументы указателя к Стандартным Библиотечным функциям memcpy, memmove и memcmp будут указатели на квалифицированные или неполные версии совместимых типов
MISRA C:2012 Rule 21.16Аргументы указателя к Стандартной Библиотечной функции memcmp укажу или на тип указателя, чрезвычайно тип со знаком, тип чрезвычайно без знака, по существу булев тип или на по существу перечислимый тип
MISRA C:2012 Rule 21.17Использование обработки строки функционирует от <string.h> не приведу к доступам вне границ объектов, на которые ссылаются их параметры указателя
MISRA C:2012 Rule 21.18size_t аргумент передал любой функции в <string.h> буду иметь соответствующее значение
MISRA C:2012 Rule 21.19Указатели возвращены Стандартными Библиотечными функциями localeconvgetenv, setlocale или strerror буду только использоваться, как будто у них есть указатель на const- квалифицированный тип
MISRA C:2012 Rule 21.20Указатель возвращен Стандартными Библиотечными функциями asctime, ctime, gmtime, localtime, localeconvgetenv, setlocale или strerror не буду использоваться после последующего вызова той же функции
MISRA C:2012 Rule 21.21Стандартная Библиотечная функция system из <stdlib.h> не буду использоваться
MISRA C:2012 Rule 22.1Все средства, полученные динамически посредством Стандартных Библиотечных функций, должны быть явным образом высвобождены
MISRA C:2012 Rule 22.2Блок памяти должен только быть освобожден, если это было выделено посредством Стандартной Библиотечной функции
MISRA C:2012 Rule 22.3Тот же файл не должен быть открыт для доступа для чтения и доступа для записи одновременно на различных потоках
MISRA C:2012 Rule 22.4Не должно быть никакой попытки записать в поток, который был открыт как только для чтения
MISRA C:2012 Rule 22.5Указатель на FILE объект не должен быть разыменован
MISRA C:2012 Rule 22.6Значение указателя на FILE не буду использоваться после того, как связанный поток был закрыт
MISRA C:2012 Rule 22.7Макро-EOF должен только быть по сравнению с немодифицированным возвращаемым значением от любой Стандартной Библиотечной функции, способной к возврату EOF
MISRA C:2012 Rule 22.8Значение errno буду обнулен до вызова errno- функция установки
MISRA C:2012 Rule 22.9Значение errno буду протестирован против нуля после вызова errno- установка функции
MISRA C:2012 Rule 22.10Значение errno буду только протестирован, когда последней функцией, которая будет названа, был errno- установка функции

Темы

Поддержка Polyspace MISRA C:2012

Поддержка Polyspace кодирования стандартов

Проверяйте поддержку Polyspace различных стандартов кодирования.

Проверяйте на кодирование стандартных нарушений

Проверяйте на нарушения C++ AUTOSAR 14, CERT® C, CERT C++ MISRA C, MISRA C++, JSF AV C++ или стандарты ISO 17961 с Polyspace Bug Finder или Code Prover.

Требуемые или обязательные правила MISRA C:2012, поддержанные Polyspace Bug Finder

Список необходимого или обязательного MISRA C:2012, кодирующего правила, которые поддерживаются Polyspace.

Статически осуществимые правила MISRA C:2012, поддержанные Polyspace Bug Finder

Список разрешимых правил в MISRAC:2012, которые поддерживаются Polyspace.

Поддержка Polyspace MISRA C: 2 012 поправок

Начиная в R2021a, Polyspace Bug Finder™ поддерживает поправки к правилам MISRA C:2012 в Техническом Исправлении 1 и Поправку 2.

Неподдерживаемые инструкции MISRA C:2012

Смотрите, какие директивы MISRA C:2012 не поддерживаются в Polyspace.

Подмножества MISRA C:2012

Подмножества цели качества программного обеспечения (C:2012)

Правила MISRA C:2012, которые уменьшают сложность кода и сокращают количество бездоказательных регистраций Polyspace Code Prover.

Кодирование подмножеств правила, проверенных рано в анализе

Настройте свою проверку правил кодирования более быстрый анализ.

Определенные правила MISRA C:2012

Избегайте нарушений правил MISRA C:2012 8.x

Избегайте конфликтных объявлений или непреднамеренной модификации переменных.

Существенные типы в правилах MISRA C:2012 10.x

Подобные типы данных, которые обработаны как чрезвычайно подобные Правилами MISRA C:2012 10.x.