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 | Программа не должна содержать нарушений синтаксиса и ограничений стандарта С и не должна превышать предельных значений перевода реализации |
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.2 | Триграфы не должны использоваться |
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 | Имя typedef должно быть уникальным идентификатором |
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 | Строковый литерал не должен назначаться объекту, если тип объекта не является «указателем на условный символ» |
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 | Указатель должен указывать на согласованный тип, когда это возможно |
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 | Отливка не должна исключать никаких противоречий или изменчивых квалификаций из типа, на который указывает указатель |
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 | Контур «для» должен быть хорошо сформирован |
MISRA C:2012 Rule 14.3 | Управляющие выражения не должны быть инвариантными |
MISRA C:2012 Rule 14.4 | Управляющее выражение оператора if и управляющее выражение оператора итерации должны иметь по существу логический тип |
MISRA C:2012 Rule 15.1 | Оператор goto не должен использоваться |
MISRA C:2012 Rule 15.2 | Оператор goto должен перейти к метке, объявленной позже в той же функции |
MISRA C:2012 Rule 15.3 | Любая метка, на которую ссылается оператор goto, должна быть объявлена в том же блоке или в любом блоке, включающем оператор goto. |
MISRA C:2012 Rule 15.4 | Для завершения любого оператора итерации должно использоваться не более одной инструкции break или goto |
MISRA C:2012 Rule 15.5 | Функция должна иметь единственную точку выхода в конце |
MISRA C:2012 Rule 15.6 | Тело итерационного оператора или оператора выбора должно быть составным оператором |
MISRA C:2012 Rule 15.7 | Все, если... в противном случае, если конструкции должны завершаться оператором else |
MISRA C:2012 Rule 16.1 | Все инструкции по переключению должны быть правильно сформированы |
MISRA C:2012 Rule 16.2 | Метку коммутатора следует использовать только в том случае, если наиболее близким составным оператором является тело оператора коммутатора. |
MISRA C:2012 Rule 16.3 | Заявление о безусловном разрыве прекращает действие каждого пункта о переключении |
MISRA C:2012 Rule 16.4 | Каждый оператор коммутатора должен иметь метку по умолчанию |
MISRA C:2012 Rule 16.5 | Метка по умолчанию должна отображаться как первая или последняя метка коммутатора инструкции switch |
MISRA C:2012 Rule 16.6 | В каждом операторе коммутатора должно быть по крайней мере два пункта |
MISRA C:2012 Rule 16.7 | Выражение switch не должно иметь логический тип |
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 | Все пути выхода из функции с типом возврата non-void должны иметь явную инструкцию return с выражением |
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 | Ключевое слово union не должно использоваться |
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, exit, 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.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 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-setting-функция |
MISRA C:2012 Rule 22.9 | Значение errno должны быть протестированы против нуля после вызова errno-настройка функции |
MISRA C:2012 Rule 22.10 | Значение errno должны проверяться только в том случае, если последней вызываемой функцией была errno-настройка функции |
См. обзор поддержки Полиспейса для стандарта MISRA C:2012.
Проверка нарушений стандартов кодирования
Проверьте наличие нарушений стандартов AUTOSAR C++ 14, CERT ® C, CERT C++ MISRA C, MISRA C++, JSF AV C++ или ISO-17961 с помощью средства поиска ошибок или средства проверки кода.
Целевые подмножества качества программного обеспечения (C:2012)
Узнайте, какие правила MISRA C:2012 снижают сложность кода и уменьшают количество неподтвержденных проверок в программе Code Prover.
Подмножества правил кодирования, проверенные на ранних этапах анализа
Узнайте, как настроить правила кодирования для более быстрого анализа.
Избегайте нарушений правил MISRA C:2012 8.x
Избегайте конфликтующих объявлений или непреднамеренного изменения переменных.
Основные типы в правилах MISRA C:2012 10.x
Узнайте, как правила C:2012 MISRA 10.x рассматривают определенные типы данных как по существу схожие.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.