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

Стандарт MISRA C:2012 классифицирует правила, что совместимый код С должен следовать как требуется и Обязательный. Всего, Polyspace® поддержки 126 из 126 таких правил.

Императивные нормы

Совместимый код С должен следовать этим правилам кодирования. Стандарт не разрешает отклонение от этих правил. Polyspace поддерживает 16 из 16 таких правил.

Правило MISRA C:2012ОписаниеСредство проверки Polyspace
Правило 12.5 MISRA C:2012sizeof оператор не должен иметь операнда, который является параметром функции, объявленным как “массив типа”MISRA C:2012 Rule 12.5
Правило 13.6 MISRA C:2012Операнд sizeof оператора не должен содержать выражение, которое имеет потенциальные побочные эффектыMISRA C:2012 Rule 13.6
Правило 17.3 MISRA C:2012Функция не должна быть объявлена неявноMISRA C:2012 Rule 17.3
Правило 17.4 MISRA C:2012Все выходные пути от функции с непустым типом возврата должны иметь явный оператор возврата с выражениемMISRA C:2012 Rule 17.4
Правило 17.6 MISRA C:2012Объявление параметра массива не должно содержать статическое ключевое слово между []MISRA C:2012 Rule 17.6
Правило 19.1 MISRA C:2012Объект не должен быть присвоен или скопирован в перекрывающийся объектMISRA C:2012 Rule 19.1
Правило 21.13 MISRA C:2012Любое значение передало функции в <ctype.h> будет представимым как unsigned char или быть значением EOFMISRA C:2012 Rule 21.13
Правило 21.17 MISRA C:2012Использование обработки строки функционирует от <string.h> не приведу к доступам вне границ объектов, на которые ссылаются их параметры указателяMISRA C:2012 Rule 21.17
Правило 21.18 MISRA C:2012size_t аргумент передал любой функции в <string.h> буду иметь соответствующее значениеMISRA C:2012 Rule 21.18
Правило 21.19 MISRA C:2012Указатели возвращены Стандартными Библиотечными функциями localeconvgetenv, setlocale или strerror буду только использоваться, как будто у них есть указатель на const- квалифицированный типMISRA C:2012 Rule 21.19
Правило 21.20 MISRA C:2012Указатель возвращен Стандартными Библиотечными функциями asctime, ctime, gmtime, localtime, localeconvgetenv, setlocale или strerror не буду использоваться после последующего вызова той же функцииMISRA C:2012 Rule 21.20
Правило 22.2 MISRA C:2012Блок памяти должен только быть освобожден, если это было выделено посредством Стандартной Библиотечной функцииMISRA C:2012 Rule 22.2
Правило 22.4 MISRA C:2012Не должно быть никакой попытки записать в поток, который был открыт как только для чтенияMISRA C:2012 Rule 22.4
Правило 22.5 MISRA C:2012Указатель на FILE объект не должен быть разыменованMISRA C:2012 Rule 22.5
Правило 22.6 MISRA C:2012Значение указателя на FILE не буду использоваться после того, как связанный поток был закрытMISRA C:2012 Rule 22.6
Правило 9.1 MISRA C:2012Значение объекта с длительностью автоматического хранения не должно быть считано, прежде чем это было установленоMISRA C:2012 Rule 9.1

Необходимые правила

Совместимый код С должен следовать этим правилам кодирования. Стандарт разрешает только отклонения, которые вы официально записываете и авторизовываете. Polyspace поддерживает 110 из 110 таких правил.

Правило MISRA C:2012ОписаниеСредство проверки Polyspace
Правило 10.1 MISRA C:2012Операнды не должны иметь несоответствующего существенного типаMISRA C:2012 Rule 10.1
Правило 10.2 MISRA C:2012Выражения чрезвычайно типа символов не должны использоваться неуместно, кроме того, и операции вычитанияMISRA C:2012 Rule 10.2
Правило 10.3 MISRA C:2012Значение выражения не должно быть присвоено объекту с более узким существенным типом или различной существенной категории типаMISRA C:2012 Rule 10.3
Правило 10.4 MISRA C:2012Оба операнда оператора, в котором выполняются обычные арифметические преобразования, должны иметь ту же существенную категорию типаMISRA C:2012 Rule 10.4
Правило 10.6 MISRA C:2012Значение составного выражения не должно быть присвоено объекту с более широким существенным типомMISRA C:2012 Rule 10.6
Правило 10.7 MISRA C:2012Если составное выражение будет использоваться в качестве одного операнда оператора, в котором обычные арифметические преобразования выполняются затем, то другой операнд не должен иметь более широкого существенного типаMISRA C:2012 Rule 10.7
Правило 10.8 MISRA C:2012Значение составного выражения не должно быть брошено к различной существенной категории типа или более широкому существенному типуMISRA C:2012 Rule 10.8
Правило 11.1 MISRA C:2012Преобразования не должны выполняться между указателем на функцию и любым другим типомMISRA C:2012 Rule 11.1
Правило 11.2 MISRA C:2012Преобразования не должны выполняться между указателем на неполный тип и любым другим типомMISRA C:2012 Rule 11.2
Правило 11.3 MISRA C:2012Бросок не должен выполняться между указателем на тип объекта и указателем на различный тип объектаMISRA C:2012 Rule 11.3
Правило 11.6 MISRA C:2012Бросок не должен выполняться между указателем на пустоту и арифметическим типомMISRA C:2012 Rule 11.6
Правило 11.7 MISRA C:2012Бросок не должен выполняться между указателем на объект и типом арифметики нецелого числаMISRA C:2012 Rule 11.7
Правило 11.8 MISRA C:2012Бросок не должен удалять const или энергозависимую проверку от типа, на который указывает указательMISRA C:2012 Rule 11.8
Правило 11.9 MISRA C:2012Макро-NULL должен быть единственной разрешенной формой целочисленного постоянного нулевого указателяMISRA C:2012 Rule 11.9
Правило 12.2 MISRA C:2012Правый операнд оператора сдвига должен лечь в нуле области значений меньше, чем ширина в битах существенного типа левого операндаMISRA C:2012 Rule 12.2
Правило 13.1 MISRA C:2012Списки инициализаторов не должны содержать персистентные побочные эффектыMISRA C:2012 Rule 13.1
Правило 13.2 MISRA C:2012Значение выражения и его персистентных побочных эффектов должно быть тем же самым согласно всем разрешенным порядкам оценкиMISRA C:2012 Rule 13.2
Правило 13.5 MISRA C:2012Правый операнд логического && или || оператор не должен содержать персистентные побочные эффектыMISRA C:2012 Rule 13.5
Правило 14.1 MISRA C:2012Счетчик цикла не должен иметь чрезвычайно типа с плавающей точкойMISRA C:2012 Rule 14.1
Правило 14.2 MISRA C:2012Цикл for должен быть правильно построенMISRA C:2012 Rule 14.2
Правило 14.3 MISRA C:2012Управление выражениями не должно быть инвариантнымMISRA C:2012 Rule 14.3
Правило 14.4 MISRA C:2012Выражение управления оператора if и выражение управления оператора цикла должны иметь по существу булев типMISRA C:2012 Rule 14.4
Правило 15.2 MISRA C:2012Оператор перехода должен перейти к метке, объявленной позже в той же функцииMISRA C:2012 Rule 15.2
Правило 15.3 MISRA C:2012Любая метка, на которую ссылается оператор перехода, должна быть объявлена в том же блоке, или в любом блоке, заключающем оператор переходаMISRA C:2012 Rule 15.3
Правило 15.6 MISRA C:2012Тело оператора цикла или оператора выбора должно быть составным операторомMISRA C:2012 Rule 15.6
Правило 15.7 MISRA C:2012Все, если … еще, если построения еще должны быть отключены с операторMISRA C:2012 Rule 15.7
Правило 16.1 MISRA C:2012Все операторы switch должны быть правильно построеныMISRA C:2012 Rule 16.1
Правило 16.2 MISRA C:2012Метка переключателя должна только использоваться, когда наиболее тесно заключающий составной оператор будет телом оператора switchMISRA C:2012 Rule 16.2
Правило 16.3 MISRA C:2012Безусловный оператор завершения должен отключить каждый пункт переключателяMISRA C:2012 Rule 16.3
Правило 16.4 MISRA C:2012Каждый оператор switch должен иметь метку по умолчаниюMISRA C:2012 Rule 16.4
Правило 16.5 MISRA C:2012Метка по умолчанию должна появиться или как первое или как последняя метка переключателя оператора switchMISRA C:2012 Rule 16.5
Правило 16.6 MISRA C:2012Каждый оператор switch должен иметь по крайней мере два пункта переключателяMISRA C:2012 Rule 16.6
Правило 16.7 MISRA C:2012Выражение переключателя не должно иметь по существу булева типаMISRA C:2012 Rule 16.7
Правило 17.1 MISRA C:2012Функции <stdarg.h> не должны быть использованыMISRA C:2012 Rule 17.1
Правило 17.2 MISRA C:2012Функции не должны вызывать себя, ни один прямо или косвенноMISRA C:2012 Rule 17.2
Правило 17.7 MISRA C:2012Значение, возвращенное функцией, имеющей непустой тип возврата, должно использоватьсяMISRA C:2012 Rule 17.7
Правило 18.1 MISRA C:2012Указатель, следующий из арифметики на операнде указателя, должен обратиться к элементу того же массива как тот операнд указателяMISRA C:2012 Rule 18.1
Правило 18.2 MISRA C:2012Вычитание между указателями должно только быть применено к указателям, которые обращаются к элементам того же массиваMISRA C:2012 Rule 18.2
Правило 18.3 MISRA C:2012Операторы отношения>,> =, <и <= не должны быть применены к объектам типа указателя кроме того, где они указывают в тот же объектMISRA C:2012 Rule 18.3
Правило 18.6 MISRA C:2012Адрес объекта с автоматическим хранением не должен быть скопирован в другой объект, который сохраняется после того, как первый объект прекратил существованиеMISRA C:2012 Rule 18.6
Правило 18.7 MISRA C:2012Члены массива с переменными границами не должны быть объявленыMISRA C:2012 Rule 18.7
Правило 18.8 MISRA C:2012Типы массива переменной длины не должны использоватьсяMISRA C:2012 Rule 18.8
Правило 1.1 MISRA C:2012Программа не должна содержать нарушения стандартного Синтаксиса C и ограничения, и не должна превышать пределы перевода реализацииMISRA C:2012 Rule 1.1
Правило 1.3 MISRA C:2012Не должно быть никакого вхождения неопределенного или критического незаданного поведенияMISRA C:2012 Rule 1.3
Правило 1.4 MISRA C:2012Функции языка на стадии становления не должны быть использованыMISRA C:2012 Rule 1.4
Правило 20.11 MISRA C:2012Макро-параметр сразу после # оператора не должен сразу сопровождаться ## операторомMISRA C:2012 Rule 20.11
Правило 20.12 MISRA C:2012Макро-параметр, используемый в качестве операнда к # или ## операторам, который самостоятельно удовлетворяет дальнейшей макро-замене, должен только использоваться в качестве операнда к этим операторамMISRA C:2012 Rule 20.12
Правило 20.13 MISRA C:2012Линия, первая лексема которой является #, должна быть допустимой директивой предварительной обработкиMISRA C:2012 Rule 20.13
Правило 20.14 MISRA C:2012Весь #else, #elif и #endif директивы препроцессору должен находиться в том же файле как #if, #ifdef или #ifndef директива, с которой они связаныMISRA C:2012 Rule 20.14
Правило 20.2 MISRA C:2012', "или \символы и/* или//последовательности символов не должны происходить на имя заголовочного файлаMISRA C:2012 Rule 20.2
Правило 20.3 MISRA C:2012#include директива должна сопровождаться или <имя файла> или последовательность "имени файла"MISRA C:2012 Rule 20.3
Правило 20.4 MISRA C:2012Макрос не должен быть задан с тем же именем как ключевое словоMISRA C:2012 Rule 20.4
Правило 20.6 MISRA C:2012Лексемы, которые похожи на директиву предварительной обработки, не должны происходить в макро-аргументеMISRA C:2012 Rule 20.6
Правило 20.7 MISRA C:2012Выражения, следующие из расширения макро-параметров, должны быть заключены в круглые скобкиMISRA C:2012 Rule 20.7
Правило 20.8 MISRA C:2012Выражение управления #if или директивы предварительной обработки #elif должно оценить к 0 или 1MISRA C:2012 Rule 20.8
Правило 20.9 MISRA C:2012Все идентификаторы, используемые в выражении управления #if или директив предварительной обработки #elif, должны быть #define’d перед оценкойMISRA C:2012 Rule 20.9
Правило 21.1 MISRA C:2012#define и #undef не должны использоваться на зарезервированном идентификаторе или зарезервировали макро-имяMISRA C:2012 Rule 21.1
Правило 21.10 MISRA C:2012Стандартные функции времени и даты Библиотеки не должны использоватьсяMISRA C:2012 Rule 21.10
Правило 21.11 MISRA C:2012Стандартный заголовочный файл <tgmath.h> не должен использоватьсяMISRA C:2012 Rule 21.11
Правило 21.14 MISRA C:2012Стандартная Библиотечная функция memcmp не буду использоваться, чтобы выдержать сравнение, пустой указатель отключил строкиMISRA C:2012 Rule 21.14
Правило 21.15 MISRA C:2012Аргументы указателя к Стандартным Библиотечным функциям memcpy, memmove и memcmp будут указатели на квалифицированные или неполные версии совместимых типовMISRA C:2012 Rule 21.15
Правило 21.16 MISRA C:2012Аргументы указателя к Стандартной Библиотечной функции memcmp укажу или на тип указателя, чрезвычайно тип со знаком, тип чрезвычайно без знака, по существу булев тип или на по существу перечислимый типMISRA C:2012 Rule 21.16
Правило 21.2 MISRA C:2012Зарезервированный идентификатор или зарезервированное макро-имя не должны быть объявленыMISRA C:2012 Rule 21.2
Правило 21.21 MISRA C:2012Стандартная Библиотечная функция system из <stdlib.h> не буду использоватьсяMISRA C:2012 Rule 21.21
Правило 21.3 MISRA C:2012Функции выделения памяти и освобождения <stdlib.h> не буду использоватьсяMISRA C:2012 Rule 21.3
Правило 21.4 MISRA C:2012Стандартный заголовочный файл <setjmp.h> не должен использоватьсяMISRA C:2012 Rule 21.4
Правило 21.5 MISRA C:2012Стандартный заголовочный файл <signal.h> не должен использоватьсяMISRA C:2012 Rule 21.5
Правило 21.6 MISRA C:2012Стандартные функции ввода/вывода Библиотеки не должны использоватьсяMISRA C:2012 Rule 21.6
Правило 21.7 MISRA C:2012Стандартные Библиотечные функции atof, atoi, atol, и atoll функции <stdlib.h> не буду использоватьсяMISRA C:2012 Rule 21.7
Правило 21.8 MISRA C:2012Стандартные Библиотечные функции abortвыход, getnenv и system из <stdlib.h> не буду использоватьсяMISRA C:2012 Rule 21.8
Правило 21.9 MISRA C:2012Стандартные библиотечные функции Библиотеки bsearch и qsort из <stdlib.h> не буду использоватьсяMISRA C:2012 Rule 21.9
Правило 22.1 MISRA C:2012Все средства, полученные динамически посредством Стандартных Библиотечных функций, должны быть явным образом высвобожденыMISRA C:2012 Rule 22.1
Правило 22.10 MISRA C:2012Значение errno буду только протестирован, когда последней функцией, которая будет названа, был errno- установка функцииMISRA C:2012 Rule 22.10
Правило 22.3 MISRA C:2012Тот же файл не должен быть открыт для доступа для чтения и доступа для записи одновременно на различных потокахMISRA C:2012 Rule 22.3
Правило 22.7 MISRA C:2012Макро-EOF должен только быть по сравнению с немодифицированным возвращаемым значением от любой Стандартной Библиотечной функции, способной к возврату EOFMISRA C:2012 Rule 22.7
Правило 22.8 MISRA C:2012Значение errno буду обнулен до вызова errno- функция установкиMISRA C:2012 Rule 22.8
Правило 22.9 MISRA C:2012Значение errno буду протестирован против нуля после вызова errno- установка функцииMISRA C:2012 Rule 22.9
Правило 2.1 MISRA C:2012Проект не должен содержать недостижимый кодMISRA C:2012 Rule 2.1
Правило 2.2 MISRA C:2012Не должно быть никакого мертвого кодаMISRA C:2012 Rule 2.2
Правило 3.1 MISRA C:2012Последовательности символов /* и // не буду использоваться в рамках комментарияMISRA C:2012 Rule 3.1
Правило 3.2 MISRA C:2012Соединение линии не должно использоваться в // комментарииMISRA C:2012 Rule 3.2
Правило 4.1 MISRA C:2012Должны быть отключены восьмеричные и шестнадцатеричные escape-последовательностиMISRA C:2012 Rule 4.1
Правило 5.1 MISRA C:2012Внешние идентификаторы должны быть отличнымиMISRA C:2012 Rule 5.1
Правило 5.2 MISRA C:2012Идентификаторы, объявленные в том же осциллографе и пространстве имен, должны быть отличнымиMISRA C:2012 Rule 5.2
Правило 5.3 MISRA C:2012Идентификатор, объявленный во внутреннем осциллографе, не должен скрывать идентификатор, объявленный во внешнем осциллографеMISRA C:2012 Rule 5.3
Правило 5.4 MISRA C:2012Макро-идентификаторы должны быть отличнымиMISRA C:2012 Rule 5.4
Правило 5.5 MISRA C:2012Идентификаторы должны быть отличны от макро-именMISRA C:2012 Rule 5.5
Правило 5.6 MISRA C:2012Имя определения типа должно быть уникальным идентификаторомMISRA C:2012 Rule 5.6
Правило 5.7 MISRA C:2012Имя тега должно быть уникальным идентификаторомMISRA C:2012 Rule 5.7
Правило 5.8 MISRA C:2012Идентификаторы, которые задают объекты или функции с внешним рычажным устройством, должны быть уникальнымиMISRA C:2012 Rule 5.8
Правило 6.1 MISRA C:2012Битовые поля должны только быть объявлены с соответствующим типомMISRA C:2012 Rule 6.1
Правило 6.2 MISRA C:2012Одноразрядные именованные битовые поля не должны иметь типа со знакомMISRA C:2012 Rule 6.2
Правило 7.1 MISRA C:2012Восьмеричные константы не должны использоватьсяMISRA C:2012 Rule 7.1
Правило 7.2 MISRA C:2012Суффикс “u” или “U” должен быть применен ко всем целочисленным константам, которые представлены в типе без знакаMISRA C:2012 Rule 7.2
Правило 7.3 MISRA C:2012Символ нижнего регистра "l" не должен использоваться в литеральном суффиксеMISRA C:2012 Rule 7.3
Правило 7.4 MISRA C:2012Строковый литерал не должен быть присвоен объекту, если тип объекта не будет “указателем на квалифицированный к const char”MISRA C:2012 Rule 7.4
Правило 8.1 MISRA C:2012Типы должны быть явным образом заданыMISRA C:2012 Rule 8.1
Правило 8.10 MISRA C:2012Подставляемая функция должна быть объявлена со статическим классом памятиMISRA C:2012 Rule 8.10
Правило 8.12 MISRA C:2012В рамках списка перечислителей значение неявно заданного постоянного перечисления должно быть уникальнымMISRA C:2012 Rule 8.12
Правило 8.14 MISRA C:2012Ограничить спецификатор типа не должен использоватьсяMISRA C:2012 Rule 8.14
Правило 8.2 MISRA C:2012Функциональные типы должны быть в прототипной форме именованными параметрамиMISRA C:2012 Rule 8.2
Правило 8.3 MISRA C:2012Все объявления объекта или функции должны использовать те же имена и ввести спецификаторыMISRA C:2012 Rule 8.3
Правило 8.4 MISRA C:2012Совместимое объявление должно отобразиться, когда объект или функция с внешним рычажным устройством будут заданыMISRA C:2012 Rule 8.4
Правило 8.5 MISRA C:2012Внешний объект или функция должны быть объявлены однажды в одном и только одном файлеMISRA C:2012 Rule 8.5
Правило 8.6 MISRA C:2012Идентификатор с внешним рычажным устройством должен иметь точно одно внешнее определениеMISRA C:2012 Rule 8.6
Правило 8.8 MISRA C:2012Статический спецификатор класса памяти должен использоваться во всех объявлениях объектов и функций, которые имеют внутреннее рычажное устройствоMISRA C:2012 Rule 8.8
Правило 9.2 MISRA C:2012Инициализатор для агрегата или объединения должен быть заключен в фигурные скобкиMISRA C:2012 Rule 9.2
Правило 9.3 MISRA C:2012Массивы не должны быть частично инициализированыMISRA C:2012 Rule 9.3
Правило 9.4 MISRA C:2012Элемент объекта не должен быть инициализирован несколько разMISRA C:2012 Rule 9.4
Правило 9.5 MISRA C:2012Где обозначенные инициализаторы используются, чтобы инициализировать объект массивов, что размер массива должен быть задан явным образомMISRA C:2012 Rule 9.5

Смотрите также

Похожие темы