Следующий набор правил кодирования MISRA® C ++ будет обычно улучшать количество бездоказательных результатов в Polyspace® Code Prover™.
MISRA правило C++ | Описание |
---|---|
2-10-2 | Идентификаторы, объявленные во внутреннем осциллографе, не должны скрывать идентификатор, объявленный во внешнем осциллографе. |
3-1-3 | Когда массив будет объявлен, его размер должен или быть утвержден явным образом или задан неявно инициализацией. |
3-3-2 | Одно Правило Определения не должно быть нарушено. |
3-9-3 | Базовые битные представления значений с плавающей точкой не должны использоваться. |
5-0-15 | Индексация массива должна быть единственной формой адресной арифметики с указателями. |
5-0-18 | >,> =, <<= не буду применен к объектам типа указателя, кроме того, где они указывают на тот же массив. |
5-0-19 | Объявление объектов должно содержать не больше, чем два уровня косвенности указателя. |
5-2-8 | Объект с целочисленным типом или указателем, чтобы освободить тип не должен быть преобразован в объект с типом указателя. |
5-2-9 | Бросок не должен преобразовывать тип указателя в целочисленный тип. |
6-2-2 | Выражения с плавающей точкой не должны быть прямо или косвенно протестированы на равенство или неравенство. |
6-5-1 | Цикл for должен содержать один счетчик цикла, который не должен иметь типа с плавающей точкой. |
6-5-2 | Если счетчик цикла не будет изменен - или ++, то в условии счетчик цикла должен только использоваться в качестве операнда к <=, <> или> =. |
6-5-3 | Счетчик цикла не должен быть изменен в условии или операторе. |
6-5-4 | Счетчик цикла должен быть изменен одним из: - ++, - =n, или + =n; где n остается постоянным на время цикла. |
6-6-1 | Любая метка, на которую ссылается оператор перехода, должна быть объявлена в том же блоке, или в блоке, заключающем оператор перехода. |
6-6-2 | Оператор перехода должен перейти к метке, объявленной позже в том же теле функции. |
6-6-4 | Для любого оператора цикла должен быть не больше, чем один оператор завершения, или оператор перехода использовал завершение цикла for. |
6-6-5 | Функция должна иметь одну точку выхода в конце функции. |
7-5-1 | Функция не должна возвращать ссылку или указатель на автоматическую переменную (включая параметры), заданный в функции. |
7-5-2 | Адрес объекта с автоматическим хранением не должен быть присвоен другому объекту, который может сохраниться после того, как первый объект прекратил существование. |
7-5-4 | Функции не должны вызывать себя, ни один прямо или косвенно. |
8-4-1 | Функции не должны быть заданы с помощью обозначения замещающего знака. |
9-5-1 | Объединения не должны использоваться. |
10-1-2 | Базовый класс должен только быть объявлен виртуальный, если он будет использоваться в ромбовидной иерархии. |
10-1-3 | Доступный базовый класс не должен быть и виртуальным и невиртуальным в той же иерархии. |
10-3-1 | Должно быть не больше, чем одно определение каждой виртуальной функции на каждом пути через иерархию наследования. |
10-3-2 | Каждая переопределяющая виртуальная функция должна быть объявлена с виртуальным ключевым словом. |
10-3-3 | Виртуальная функция должна только быть заменена чистой виртуальной функцией, если она будет самостоятельно объявлена как чистая виртуальная. |
15-0-3 | Управление не должно быть передано в попытку или блок выгоды с помощью goto или оператора switch. |
15-1-3 | Пустой бросок (бросок;) буду только использоваться в составном операторе обработчика выгоды. |
15-3-3 | Обработчики реализации функционального блока попытки конструктора класса или деструктора не должны ссылаться на нестатических участников от этого класса или его основ. |
15-3-5 | Исключение типа класса должно всегда отлавливаться ссылкой. |
15-3-6 | Где несколько обработчиков обеспечиваются в одном операторе try-catch или функциональном блоке попытки для производного класса, и некоторые или все его основы, обработчики должны быть упорядочены наиболее выведенные базовому классу. |
15-3-7 | Где несколько обработчиков обеспечиваются в одном операторе try-catch или функциональном блоке попытки, любой замещающий знак (вместилище), обработчик должен произойти в последний раз. |
15-4-1 | Если функция будет объявлена со спецификацией исключения, то все объявления той же функции (в других модулях перевода) должны быть объявлены с тем же набором идентификаторов типов. |
15-5-1 | Деструктор класса не должен выходить за исключением. |
15-5-2 | Где объявление функции включает спецификацию исключения, функция должна только быть способна к выдаванию исключения обозначенного типа (типов). |
18-4-1 | Динамическое выделение памяти кучи не должно использоваться. |
Хорошие методы проекта обычно приводят к меньшему количеству сложности кода, которая может улучшить количество бездоказательных результатов в Polyspace Code Prover. Следующий набор кодирования правил может помочь обратиться к проблемам проекта в вашем коде. Опция SQO-subset2
проверяет правила в SQO-subset1
и SQO-subset2
.
MISRA правило C++ | Описание |
---|---|
2-10-2 | Идентификаторы, объявленные во внутреннем осциллографе, не должны скрывать идентификатор, объявленный во внешнем осциллографе. |
3-1-3 | Когда массив будет объявлен, его размер должен или быть утвержден явным образом или задан неявно инициализацией. |
3-3-2 | Если функция будет иметь внутреннюю связь затем, то все переобъявления должны включать статический спецификатор класса памяти. |
3-4-1 | Идентификатор, который, как объявляют, был объектом или типом, должен быть задан в блоке, который минимизирует его видимость. |
3-9-2 | определения типов, которые указывают на размер и со знаком, должны использоваться вместо основных числовых типов. |
3-9-3 | Базовые битные представления значений с плавающей точкой не должны использоваться. |
4-5-1 | Выражения с типом bool не должны использоваться в качестве операндов к встроенным операторам кроме оператора присваивания =, логические операторы &&, ||!, операторы равенства == и! =, унарное & оператор и условный оператор. |
5-0-1 | Значение выражения должно быть тем же самым согласно любому порядку оценки, которую разрешает стандарт. |
5-0-2 | Ограниченная зависимость должна быть помещена в правила приоритета оператора C++ в выражениях. |
5-0-7 | Не должно быть никаких явных интегральных плаванием преобразований cvalue выражения. |
5-0-8 | Явное интегральное или преобразование с плавающей точкой не должно увеличивать размер базового типа cvalue выражения. |
5-0-9 | Явное интегральное преобразование не должно изменять со знаком из базового типа cvalue выражения. |
5-0-10 | Если побитовые операторы ~ и <<будут применены к операнду с базовым типом символьного или короткого целого без знака без знака, результат должен быть сразу брошен к базовому типу операнда. |
5-0-13 | Условие оператора "if" и условие оператора цикла должны иметь тип bool |
5-0-15 | Индексация массива должна быть единственной формой адресной арифметики с указателями. |
5-0-18 | >,> =, <<= не буду применен к объектам типа указателя, кроме того, где они указывают на тот же массив. |
5-0-19 | Объявление объектов должно содержать не больше, чем два уровня косвенности указателя. |
5-2-1 | Каждый операнд логического && или || должен быть постфиксом - выражение. |
5-2-2 | Указатель на виртуальный базовый класс должен только быть брошен к указателю на производный класс посредством dynamic_cast. |
5-2-5 | Бросок не должен удалять const или энергозависимую проверку от типа указателя или ссылки. |
5-2-6 | Бросок не должен преобразовывать указатель на функцию ни к какому другому типу указателя, включая указатель на функциональный тип. |
5-2-7 | Объект с типом указателя не должен быть преобразован в несвязанный тип указателя, ни один прямо или косвенно. |
5-2-8 | Объект с целочисленным типом или указателем, чтобы освободить тип не должен быть преобразован в объект с типом указателя. |
5-2-9 | Бросок не должен преобразовывать тип указателя в целочисленный тип. |
5-2-11 | Оператор запятой, && оператор и || оператор не должен быть перегружен. |
5-3-2 | Оператор унарный минус не должен быть применен к выражению, базовый тип которого без знака. |
5-3-3 | Унарное & оператор не должны быть перегружены. |
5-18-1 | Оператор запятой не должен использоваться. |
6-2-1 | Операторы присваивания не должны использоваться в подвыражениях. |
6-2-2 | Выражения с плавающей точкой не должны быть прямо или косвенно протестированы на равенство или неравенство. |
6-3-1 | Оператор, формирующий тело переключателя, в то время как, делает..., в то время как или для оператора будет составной оператор. |
6-4-2 | Все, если... еще, если построения должны быть отключены с выражением else. |
6-4-6 | Итоговый пункт оператора switch должен быть пунктом по умолчанию. |
6-5-1 | Цикл for должен содержать один счетчик цикла, который не должен иметь типа с плавающей точкой. |
6-5-2 | Если счетчик цикла не будет изменен - или ++, то в условии счетчик цикла должен только использоваться в качестве операнда к <=, <> или> =. |
6-5-3 | Счетчик цикла не должен быть изменен в условии или операторе. |
6-5-4 | Счетчик цикла должен быть изменен одним из: - ++, - =n, или + =n; где n остается постоянным на время цикла. |
6-6-1 | Любая метка, на которую ссылается оператор перехода, должна быть объявлена в том же блоке, или в блоке, заключающем оператор перехода. |
6-6-2 | Оператор перехода должен перейти к метке, объявленной позже в том же теле функции. |
6-6-4 | Для любого оператора цикла должен быть не больше, чем один оператор завершения, или оператор перехода использовал завершение цикла for. |
6-6-5 | Функция должна иметь одну точку выхода в конце функции. |
7-5-1 | Функция не должна возвращать ссылку или указатель на автоматическую переменную (включая параметры), заданный в функции. |
7-5-2 | Адрес объекта с автоматическим хранением не должен быть присвоен другому объекту, который может сохраниться после того, как первый объект прекратил существование. |
7-5-4 | Функции не должны вызывать себя, ни один прямо или косвенно. |
8-4-1 | Функции не должны быть заданы с помощью обозначения замещающего знака. |
8-4-3 | Все выходные пути от функции с не - пустой тип возврата должны иметь явный оператор возврата с выражением. |
8-4-4 | Функциональный идентификатор должен или использоваться, чтобы вызвать функцию, или этим нужно предшествовать &. |
8-5-2 | Фигурные скобки должны использоваться, чтобы указать и совпадать со структурой в не - нулевая инициализация массивов и структур. |
8-5-3 | В списке перечислителей = построение не должно использоваться, чтобы явным образом инициализировать участников кроме первого, если все элементы не будут явным образом инициализированы. |
9-5-1 | Объединения не должны использоваться. |
10-1-2 | Базовый класс должен только быть объявлен виртуальный, если он будет использоваться в ромбовидной иерархии. |
10-1-3 | Доступный базовый класс не должен быть и виртуальным и невиртуальным в той же иерархии. |
10-3-1 | Должно быть не больше, чем одно определение каждой виртуальной функции на каждом пути через иерархию наследования. |
10-3-2 | Каждая переопределяющая виртуальная функция должна быть объявлена с виртуальным ключевым словом. |
10-3-3 | Виртуальная функция должна только быть заменена чистой виртуальной функцией, если она будет самостоятельно объявлена как чистая виртуальная. |
11-0-1 | Членские данные в не - типы классов POD должны быть частными. |
12-1-1 | Динамический тип объекта не должен использоваться от тела его конструктора или деструктора. |
12-8-2 | Оператор присваивания копии должен быть объявлен защищенный или частный в абстрактном классе. |
15-0-3 | Управление не должно быть передано в попытку или блок выгоды с помощью goto или оператора switch. |
15-1-3 | Пустой бросок (бросок;) буду только использоваться в составном операторе обработчика выгоды. |
15-3-3 | Обработчики реализации функционального блока попытки конструктора класса или деструктора не должны ссылаться на нестатических участников от этого класса или его основ. |
15-3-5 | Исключение типа класса должно всегда отлавливаться ссылкой. |
15-3-6 | Где несколько обработчиков обеспечиваются в одном операторе try-catch или функциональном блоке попытки для производного класса, и некоторые или все его основы, обработчики должны быть упорядочены наиболее выведенные базовому классу. |
15-3-7 | Где несколько обработчиков обеспечиваются в одном операторе try-catch или функциональном блоке попытки, любой замещающий знак (вместилище), обработчик должен произойти в последний раз. |
15-4-1 | Если функция будет объявлена со спецификацией исключения, то все объявления той же функции (в других модулях перевода) должны быть объявлены с тем же набором идентификаторов типов. |
15-5-1 | Деструктор класса не должен выходить за исключением. |
15-5-2 | Где объявление функции включает спецификацию исключения, функция должна только быть способна к выдаванию исключения обозначенного типа (типов). |
16-0-5 | Аргументы к подобному функции макросу не должны содержать лексемы, которые похожи на предварительную обработку директив. |
16-0-6 | В определении подобного функции макроса каждый экземпляр параметра должен быть заключен в круглые скобки, если это не будет использоваться в качестве операнда # или ##. |
16-0-7 | Неопределенные макро-идентификаторы не должны использоваться в #if или #elif директивах препроцессору, за исключением операндов к заданному оператору. |
16-2-2 | Макросы C++ должны только использоваться для: включайте защиту, введите спецификаторы или спецификаторы класса памяти. |
16-3-1 | Должно быть самое большее одно вхождение # или ## операторов в одном макроопределении. |
18-4-1 | Динамическое выделение памяти кучи не должно использоваться. |
Check MISRA C++:2008 (-misra-cpp)