Polyspace может проверять ваш код по MISRA C:2012, кодирующему правила и некоторые директивы. Подгруппы перечислили карту к различным подмножествам, обрисованным в общих чертах в инструкциях MISRA C®:2012. Используйте Check MISRA C:2012
(-misra3)
аналитическая опция, чтобы активировать подмножества правил.
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.6 | typedefs это указывает, что размер и со знаком должен использоваться вместо основных числовых типов |
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 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.2 | Trigraphs не должен использоваться |
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.5 | sizeof оператор не должен иметь операнда, который является параметром функции, объявленным как “массив типа” |
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 | Аварийное прекращение работы библиотечных функций, выход, getenv и система <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.18 | size_t аргумент передал любой функции в <string.h> буду иметь соответствующее значение |
MISRA C:2012 Rule 21.19 | Указатели возвращены Стандартными Библиотечными функциями localeconv getenv , setlocale или strerror буду только использоваться, как будто у них есть указатель на const - квалифицированный тип |
MISRA C:2012 Rule 21.20 | Указатель возвращен Стандартными Библиотечными функциями asctime , ctime , gmtime , localtime , localeconv getenv , setlocale или strerror не буду использоваться после последующего вызова той же функции |
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 Стандарта MISRA C:2012.
Проверяйте на кодирование стандартных нарушений
Проверяйте на нарушения C++ AUTOSAR 14, CERT® C, CERT C++ MISRA C, MISRA C++, JSF AV C++ или стандарт ISO 17961 с Программой автоматического доказательства Средства поиска или Кода Ошибки.
Подмножества цели качества программного обеспечения (C:2012)
Смотрите, какие правила MISRA C:2012 уменьшают сложность кода и сокращают количество бездоказательных регистраций Программы автоматического доказательства Кода.
Кодирование подмножеств правила, проверенных рано в анализе
Узнать, как настраивать вашу проверку правил кодирования более быстрый анализ.
Избегайте нарушений правил MISRA C:2012 8.x
Избегайте конфликтных объявлений или непреднамеренной модификации переменных.
Существенные типы в правилах MISRA C:2012 10.x
Узнать, как правила MISRA C:2012 10.x обрабатывают определенные типы данных как чрезвычайно подобные.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.