Стандарт MISRA C:2012 классифицирует правила, что совместимый код С должен следовать как требуется и Обязательный. Всего, Polyspace® поддержки 126 из 126 таких правил.
Совместимый код С должен следовать этим правилам кодирования. Стандарт не разрешает отклонение от этих правил. Polyspace поддерживает 16 из 16 таких правил.
Правило MISRA C:2012 | Описание | Средство проверки Polyspace |
---|---|---|
Правило 12.5 MISRA C:2012 | sizeof оператор не должен иметь операнда, который является параметром функции, объявленным как “массив типа” | 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 или быть значением EOF | MISRA C:2012 Rule 21.13 |
Правило 21.17 MISRA C:2012 | Использование обработки строки функционирует от <string.h> не приведу к доступам вне границ объектов, на которые ссылаются их параметры указателя | MISRA C:2012 Rule 21.17 |
Правило 21.18 MISRA C:2012 | size_t аргумент передал любой функции в <string.h> буду иметь соответствующее значение | MISRA C:2012 Rule 21.18 |
Правило 21.19 MISRA C:2012 | Указатели возвращены Стандартными Библиотечными функциями localeconv getenv , setlocale или strerror буду только использоваться, как будто у них есть указатель на const - квалифицированный тип | MISRA C:2012 Rule 21.19 |
Правило 21.20 MISRA C:2012 | Указатель возвращен Стандартными Библиотечными функциями asctime , ctime , gmtime , localtime , localeconv getenv , 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 | Метка переключателя должна только использоваться, когда наиболее тесно заключающий составной оператор будет телом оператора switch | MISRA 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 | Метка по умолчанию должна появиться или как первое или как последняя метка переключателя оператора switch | MISRA 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 или 1 | MISRA 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 должен только быть по сравнению с немодифицированным возвращаемым значением от любой Стандартной Библиотечной функции, способной к возврату EOF | MISRA 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 |