В начальной фазе компиляции анализа Polyspace® проверяет тех, которые кодируют правила, которые не требуют части обнаружения ошибки времени выполнения анализа. Если вы хотите только те проверяемые правила, можно выполнить намного более быстрый анализ.
Программное обеспечение обеспечивает два предопределенных подмножества правил, что оно проверяет ранее в анализ. Подмножества доступны с опциями Check MISRA C:2004 (-misra2)
, Check MISRA AC AGC (-misra-ac-agc)
, и Check MISRA C:2012 (-misra3)
.
Аргумент | Цель |
---|---|
single-unit-rules | Проверяйте правила, которые применяются только к одному модулям перевода. Если вы обнаруживаете только кодирующие нарушения правила и выбираете это подмножество, анализ Bug Finder остановки после фазы компиляции. |
system-decidable-rules | Проверяйте правила в Если вы обнаруживаете только кодирующие нарушения правила и выбираете это подмножество, анализ Bug Finder остановки после соединяющейся фазы. |
См. также Проверку на Кодирование Нарушений Правила.
Программное обеспечение проверяет следующие правила рано в анализ. Правила, которые проверяются в уровне системы и появляются только в system-decidable-rules
подмножество обозначается звездочкой.
Среда
Правило | Описание |
---|---|
1.1* | Весь код должен приспособить ISO® 9899:1990 "Языкам программирования - C", исправил и откорректированный ISO/IEC 9899/COR1:1995, ISO/IEC 9899/AMD1:1995 и ISO/IEC 9899/COR2:1996. |
Расширения языка
Правило | Описание |
---|---|
2.1 | Ассемблер должен инкапсулироваться и изолироваться. |
2.2 | Исходный код должен только использовать |
2.3 | Последовательность символов |
Документация
Правило | Описание |
---|---|
3.4 | Все использование |
Наборы символов
Правило | Описание |
---|---|
4.1 | Только те escape-последовательности, которые заданы в стандарте ISO C, должны использоваться. |
4.2 | Trigraphs не должен использоваться. |
Идентификаторы
Правило | Описание |
---|---|
5.1* | Идентификаторы (внутренний и внешний) не должны использовать значение больше чем 31 символа. |
5.2 | Идентификаторы во внутреннем осциллографе не должны использовать то же имя в качестве идентификатора во внешнем осциллографе, и поэтому скрыть тот идентификатор. |
5.3* | Имя определения типа должно быть уникальным идентификатором. |
5.4* | Имя тега должно быть уникальным идентификатором. |
5.5* | Никакой объектный или функциональный идентификатор со статической продолжительностью хранения не должен быть снова использован. |
5.6* | Никакой идентификатор в одном пространстве имен не должен иметь то же написание как идентификатор в другом пространстве имен, за исключением имен члена профсоюза и структуры. |
5.7* | Никакое имя идентификатора не должно быть снова использовано. |
Типы
Правило | Описание |
---|---|
6.1 | Простой символьный тип должен использоваться только для устройства хранения данных и использования символьных значений. |
6.2 | Подписанный и символьный тип без знака должен использоваться только для устройства хранения данных и использования числовых значений. |
6.3 |
|
6.4 | Битовые поля должны только быть заданы, чтобы иметь тип |
6.5 | Битовые поля типа |
Константы
Правило | Описание |
---|---|
7.1 | Восьмеричные константы (кроме нуля) и восьмеричные escape-последовательности не должны использоваться. |
Объявления и определения
Правило | Описание |
---|---|
8.1 | Функции должны иметь объявления прототипа, и прототип должен отобразиться в обоих функциональным определением и вызовом. |
8.2 | Каждый раз, когда объект или функция объявлены или заданы, ее тип должен быть явным образом утвержден. |
8.3 | Для каждого параметра функции тип, данный в объявлении и определении, должен быть идентичным, и типы возврата должны также быть идентичными. |
8.4* | Если объекты или функции будут объявлены несколько раз, то их типы должны быть совместимыми. |
8.5 | Не должно быть никаких определений объектов или функций в заголовочном файле. |
8.6 | Функции должны всегда объявляться в осциллографе файла. |
8.7 | Объекты должны быть заданы в области действия блока, если к ним только получат доступ из одной функции. |
8.8* | Внешний объект или функция должны быть объявлены в одном файле и только одном файле. |
8.9* | Идентификатор с внешним рычажным устройством должен иметь точно одно внешнее определение. |
8.10* | Все объявления и определения объектов или функций в осциллографе файла должны иметь внутреннее рычажное устройство, если внешнее рычажное устройство не будет требоваться. |
8.11 |
|
8.12 | Когда массив будет объявлен с внешним рычажным устройством, его размер должен быть утвержден явным образом или задан неявно инициализацией. |
Инициализация
Правило | Описание |
---|---|
9.2 | Фигурные скобки должны использоваться, чтобы указать и совпадать со структурой в ненулевой инициализации массивов и структурами. |
9.3 | В списке перечислителей, |
Арифметическое преобразование типов
Правило | Описание |
---|---|
10.1 | Значение выражения целочисленного типа не должно быть неявно преобразовано в различный базовый тип если:
|
10.2 | Значение выражения типа с плавающей точкой не должно быть неявно преобразовано в другой тип если
|
10.3 | Значение сложного выражения целочисленного типа может только быть брошено к типу, который является более узким и того же самого, со знаком как базовый тип выражения. |
10.4 | Значение сложного выражения типа плавающего может только быть брошено к более узкому типу с плавающей точкой. |
10.5 | Если побитовый оператор |
10.6 | Суффикс "U" должен быть применен ко всем константам |
Преобразование типа указателя
Правило | Описание |
---|---|
11.1 | Преобразование не должно выполняться между указателем на функцию и любым типом кроме целочисленного типа. |
11.2 | Преобразование не должно выполняться между указателем на объект и любым типом кроме целочисленного типа, другим указателем на тип объекта или указателем на |
11.3 | Бросок не должен быть выполнен между типом указателя и целочисленным типом. |
11.4 | Бросок не должен быть выполнен между указателем на тип объекта и различным указателем на тип объекта. |
11.5 | Бросок не должен выполняться, который удаляет любой |
Выражения
Правило | Описание |
---|---|
12.1 | Ограниченная зависимость должна быть помещена в правила приоритета оператора К в выражениях. |
12.3 |
|
12.5 | Операнды логического |
12.6 | Операнды логических операторов ( |
12.7 | Побитовые операторы не должны быть применены к операндам, базовый тип которых подписывается. |
12.9 | Оператор унарный минус не должен быть применен к выражению, базовый тип которого без знака. |
12.10 | Оператор запятой не должен использоваться. |
12.11 | Оценка постоянного выражения без знака не должна вести, чтобы повториться. |
12.12 | Базовые битные представления значений с плавающей точкой не должны использоваться. |
12.13 | Шаг ( |
Управляйте выражениями оператора
Правило | Описание |
---|---|
13.1 | Операторы присваивания не должны использоваться в выражениях то выражение булевы значения. |
13.2 | Тесты значения против нуля должны быть сделаны явными, если операнд не является эффективно булевым. |
13.3 | Выражения с плавающей точкой не должны быть протестированы на равенство или неравенство. |
13.4 | Выражение управления |
13.5 | Три выражения |
13.6 | Числовые переменные, используемые в |
Поток управления
Правило | Описание |
---|---|
14.3 | Все непустые операторы должны быть также
|
14.4 |
|
14.5 |
|
14.6 | Для любого оператора цикла должен быть самое большее один |
14.7 | Функция должна иметь одну точку выхода в конце функции. |
14.8 | Оператор, формирующий тело |
14.9 |
|
14.10 | Весь |
Операторы switch
Правило | Описание |
---|---|
15.0 | Недостижимый код обнаруживается между |
15.1 |
|
15.2 | Безусловный |
15.3 | Итоговый пункт |
15.4 |
|
15.5 | Каждый |
Функции
Правило | Описание |
---|---|
16.1 | Функции не должны быть заданы с переменными количествами аргументов. |
16.3 | Идентификаторы должны быть даны для всех параметров в объявлении прототипа функции. |
16.4* | Идентификаторы, используемые в объявлении и определении функции, должны быть идентичными. |
16.5 | Функции без параметров должны быть объявлены с типом параметра |
16.6 | Количество аргументов, переданных функции, должно совпадать с количеством параметров. |
16.8 | Все выходные пути от функции с non- |
16.9 | Функциональный идентификатор должен только использоваться с любым предыдущий |
Указатели и массивы
Правило | Описание |
---|---|
17.4 | Индексация массива должна быть единственной позволенной формой адресной арифметики с указателями. |
17.5 | Тип не должен содержать больше чем 2 уровня косвенности указателя. |
Структуры и объединения
Правило | Описание |
---|---|
18.1 | Вся структура или типы объединения должны быть завершены в конце модуля перевода. |
18.4 | Объединения не должны использоваться. |
Предварительная обработка директив
Правило | Описание |
---|---|
19.1 |
|
19.2 | Нестандартные символы не должны происходить на имена заголовочного файла в |
19.3 |
|
19.4 | C макросы только расширюсь до заключенного в фигурные скобки инициализатора, константы, заключенного в скобки выражения, спецификатора типа, спецификатора класса памяти, или построение "делает в то время как нуль". |
19.5 | Макросами не должен быть |
19.6 |
|
19.7 | Функция должна использоваться в предпочтении к функциональному подобному макросу. |
19.8 | Подобный функции макрос не должен быть вызван безо всех его аргументов. |
19.9 | Аргументы к подобному функции макросу не должны содержать лексемы, которые похожи на предварительную обработку директив. |
19.10 | В определении подобного функции макроса каждый экземпляр параметра должен быть заключен в круглые скобки, если это не будет использоваться в качестве операнда |
19.11 | Все макро-идентификаторы в директивах препроцессору должны быть заданы перед использованием, кроме |
19.12 | Должно быть самое большее одно вхождение |
19.13 |
|
19.14 | Заданный оператор препроцессора должен только использоваться в одной из двух стандартных форм. |
19.15 | Меры предосторожности должны быть приняты для того, чтобы предотвратить содержимое заголовочного файла, включаемого дважды. |
19.16 | Предварительная обработка директив должна быть синтаксически значимой, даже когда исключено препроцессором. |
19.17 | Весь |
Стандартные библиотеки
Правило | Описание |
---|---|
20.1 | Зарезервированные идентификаторы, макросы и функции в стандартной библиотеке, не должны быть заданы, переопределены или не определены. |
20.2 | Имена стандартных макросов библиотеки, объектов и функций не должны быть снова использованы. |
20.4 | Динамическое выделение памяти кучи не должно использоваться. |
20.5 | Ошибочный индикатор |
20.6 | Макро- |
20.7 |
|
20.8 | Погрузочно-разгрузочное оборудование сигнала |
20.9 | Библиотека |
20.10 | Библиотечные функции |
20.11 | Библиотечные функции |
20.12 | Функции обработки времени библиотеки |
Правила, которые проверяются в уровне системы и появляются только в system-decidable-rules
подмножество обозначается звездочкой.
Программное обеспечение проверяет следующие правила рано в анализ. Правила, которые проверяются в уровне системы и появляются только в system-decidable-rules
подмножество обозначается звездочкой.
Стандарт C среда
Правило | Описание |
---|---|
1.1 | Программа не должна содержать нарушения стандартного Синтаксиса C и ограничения, и не должна превышать пределы перевода реализации. |
1.2 | Расширения языка не должны использоваться. |
Неиспользованный код
Правило | Описание |
---|---|
2.3* | Проект не должен содержать неиспользованные описания типа. |
2.4* | Проект не должен содержать неиспользованные объявления тега. |
2.5* | Проект не должен содержать неиспользованные макро-объявления. |
2.6 | Функция не должна содержать неиспользованные описания меток. |
2.7 | В функциях не должно быть никаких неиспользованных параметров. |
Комментарии
Правило | Описание |
---|---|
3.1 | Последовательности символов |
3.2 | Соединение линии не должно использоваться в |
Наборы символов и лексические соглашения
Правило | Описание |
---|---|
4.1 | Должны быть отключены восьмеричные и шестнадцатеричные escape-последовательности. |
4.2 | Trigraphs не должен использоваться. |
Идентификаторы
Правило | Описание |
---|---|
5.1* | Внешние идентификаторы должны быть отличными. |
5.2 | Идентификаторы, объявленные в том же осциллографе и пространстве имен, должны быть отличными. |
5.3 | Идентификатор, объявленный во внутреннем осциллографе, не должен скрывать идентификатор, объявленный во внешнем осциллографе. |
5.4 | Макро-идентификаторы должны быть отличными. |
5.5 | Идентификаторы должны быть отличны от макро-имен. |
5.6* | Имя определения типа должно быть уникальным идентификатором. |
5.7* | Имя тега должно быть уникальным идентификатором. |
5.8* | Идентификаторы, которые задают объекты или функции с внешним рычажным устройством, должны быть уникальными. |
5.9* | Идентификаторы, которые задают объекты или функции с внутренним рычажным устройством, должны быть уникальными. |
Типы
Правило | Описание |
---|---|
6.1 | Битовые поля должны только быть объявлены с соответствующим типом. |
6.2 | Одноразрядные именованные битовые поля не должны иметь типа со знаком. |
Литералы и константы
Правило | Описание |
---|---|
7.1 | Восьмеричные константы не должны использоваться. |
7.2 | Суффикс "u" или "U" должен быть применен ко всем целочисленным константам, которые представлены в типе без знака. |
7.3 | Символ нижнего регистра "l" не должен использоваться в литеральном суффиксе. |
7.4 | Строковый литерал не должен быть присвоен объекту, если тип объекта не будет "указателем на квалифицированный к const char". |
Объявления и определения
Правило | Описание |
---|---|
8.1 | Типы должны быть явным образом заданы. |
8.2 | Функциональные типы должны быть в прототипной форме именованными параметрами. |
8.3* | Все объявления объекта или функции должны использовать те же имена и ввести спецификаторы. |
8.4 | Совместимое объявление должно отобразиться, когда объект или функция с внешним рычажным устройством будут заданы. |
8.5* | Внешний объект или функция должны быть объявлены однажды в одном и только одном файле. |
8.6* | Идентификатор с внешним рычажным устройством должен иметь точно одно внешнее определение. |
8.7* | Функции и объекты не должны быть заданы с внешним рычажным устройством, если на них ссылаются только в одном модуле перевода. |
8.8 |
|
8.9* | Объект должен быть задан в области действия блока, если ее идентификатор только появляется в одной функции. |
8.10 | Подставляемая функция должна быть объявлена с |
8.11 | Когда массив с внешним рычажным устройством объявляется, его размер должен быть явным образом задан. |
8.12 | В рамках списка перечислителей значение неявно заданного постоянного перечисления должно быть уникальным. |
8.14 |
|
Инициализация
Правило | Описание |
---|---|
9.2 | Инициализатор для агрегата или объединения должен быть заключен в фигурные скобки. |
9.3 | Массивы не должны быть частично инициализированы. |
9.4 | Элемент объекта не должен быть инициализирован несколько раз. |
9.5 | Где обозначенные инициализаторы используются, чтобы инициализировать объект массивов, что размер массива должен быть задан явным образом. |
Существенная модель типа
Правило | Описание |
---|---|
10.1 | Операнды не должны иметь несоответствующего существенного типа. |
10.2 | Выражения чрезвычайно типа символов не должны использоваться неуместно, кроме того, и операции вычитания. |
10.3 | Значение выражения не должно быть присвоено объекту с более узким существенным типом или различной существенной категории типа. |
10.4 | Оба операнда оператора, в котором выполняются обычные арифметические преобразования, должны иметь ту же существенную категорию типа. |
10.5 | Значение выражения не должно быть брошено к несоответствующему существенному типу. |
10.6 | Значение составного выражения не должно быть присвоено объекту с более широким существенным типом. |
10.7 | Если составное выражение будет использоваться в качестве одного операнда оператора, в котором обычные арифметические преобразования выполняются затем, то другой операнд не должен иметь более широкого существенного типа. |
10.8 | Значение составного выражения не должно быть брошено к различной существенной категории типа или более широкому существенному типу. |
Преобразование типа указателя
Правило | Описание |
---|---|
11.1 | Преобразования не должны выполняться между указателем на функцию и любым другим типом. |
11.2 | Преобразования не должны выполняться между указателем на неполный тип и любым другим типом. |
11.3 | Бросок не должен выполняться между указателем на тип объекта и указателем на различный тип объекта. |
11.4 | Преобразование не должно быть выполнено между указателем на объект и целочисленным типом. |
11.5 | Преобразование не должно быть выполнено от указателя, чтобы освободить в указатель на объект. |
11.6 | Бросок не должен выполняться между указателем на пустоту и арифметическим типом. |
11.7 | Бросок не должен выполняться между указателем на объект и типом арифметики нецелого числа. |
11.8 | Бросок не должен удалять const или энергозависимую проверку от типа, на который указывает указатель. |
11.9 | Макро- |
Выражения
Правило | Описание |
---|---|
12.1 | Приоритет операторов в рамках выражений должен быть сделан явным. |
12.3 | Оператор запятой не должен использоваться. |
12.4 | Оценка константных выражений не должна приводить к переносу беззнаковых целых чисел. |
Побочные эффекты
Правило | Описание |
---|---|
13.3 | Полное выражение, содержащее шаг ( |
13.4 | Результат оператора присваивания не должен использоваться. |
13.6 | Операнд |
Управляйте выражениями оператора
Правило | Описание |
---|---|
14.4 | Выражение управления |
Поток управления
Правило | Описание |
---|---|
15.1 |
|
15.2 |
|
15.3 | На любую метку ссылается |
15.4 | Должен быть не больше, чем один |
15.5 | Функция должна иметь одну точку выхода в конце |
15.6 | Тело оператора цикла или оператора выбора должно быть составным оператором. |
15.7 | Весь |
Операторы switch
Правило | Описание |
---|---|
16.1 | Весь |
16.2 |
|
16.3 | Безусловный |
16.4 | Каждый |
16.5 |
|
16.6 | Каждый |
16.7 |
|
Функции
Правило | Описание |
---|---|
17.1 | Функции |
17.3 | Функция не должна быть объявлена неявно. |
17.4 | Все выходные пути от функции с non- |
17.6 | Объявление параметра массива не должно содержать |
17.7 | Значение, возвращенное функцией, имеющей non- |
Указатели и массивы
Правило | Описание |
---|---|
18.4 |
|
18.5 | Объявления должны содержать не больше, чем два уровня вложения указателя. |
18.7 | Члены массива с переменными границами не должны быть объявлены. |
18.8 | Типы массива переменной длины не должны использоваться. |
Наложение устройства хранения данных
Правило | Описание |
---|---|
19.2 |
|
Предварительная обработка директив
Правило | Описание |
---|---|
20.1 |
|
20.2 |
|
20.3 |
|
20.4 | Макрос не должен быть задан с тем же именем как ключевое слово. |
20.5 |
|
20.6 | Лексемы, которые похожи на директиву предварительной обработки, не должны происходить в макро-аргументе. |
20.7 | Выражения, следующие из расширения макро-параметров, должны быть заключены в круглые скобки. |
20.8 | Выражение управления |
20.9 | Все идентификаторы используются в выражении управления |
20.10 |
|
20.11 | Макро-параметр сразу после |
20.12 | Макро-параметр, используемый в качестве операнда к |
20.13 | Линия, первой лексемой которой является |
20.14 | Весь |
Стандартные библиотеки
Правило | Описание |
---|---|
21.1 |
|
21.2 | Зарезервированный идентификатор или макро-имя не должны быть объявлены. |
21.3 | Функции выделения памяти и освобождения |
21.4 | Стандартный заголовочный файл |
21.5 | Стандартный заголовочный файл |
21.6 | Стандартные функции ввода/вывода Библиотеки не должны использоваться. |
21.7 |
|
21.8 | Библиотечные функции |
21.9 | Библиотечные функции |
21.10 | Стандартные функции времени и даты Библиотеки не должны использоваться. |
21.11 | Стандартный заголовочный файл |
21.12 | Функции обработки исключений |
Правила, которые проверяются в уровне системы и появляются только в system-decidable-rules
подмножество обозначается звездочкой.
Check MISRA AC AGC (-misra-ac-agc)
| Check MISRA C:2004 (-misra2)
| Check MISRA C:2012 (-misra3)