В начальной фазе компиляции анализа Polyspace® проверяет тех, которые кодируют правила, которые не требуют части обнаружения ошибки времени выполнения анализа. Если вы хотите только те проверяемые правила, можно выполнить намного более быстрый анализ.
Программное обеспечение обеспечивает два предопределенных подмножества правил, что оно проверяет ранее в анализ. Подмножества доступны с опциями Check MISRA C:2004 (-misra2)
, Check MISRA AC AGC (-misra-ac-agc)
и Check MISRA C:2012 (-misra3)
.
Аргумент | Цель |
---|---|
single-unit-rules | Проверяйте правила, которые применяются только к одному модулям перевода. Если вы обнаруживаете только кодирующие нарушения правила и выбираете это подмножество, анализ Средства поиска Ошибки останавливается после фазы компиляции. |
system-decidable-rules | Проверяйте правила в подмножество Если вы обнаруживаете только кодирующие нарушения правила и выбираете это подмножество, анализ Средства поиска Ошибки останавливается после соединяющейся фазы. |
См. также Проверку на Кодирование Нарушений Правила.
Программное обеспечение проверяет следующие правила рано в анализ. Правила, которые проверяются в уровне системы и появляются только в подмножестве 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 | Для любого оператора цикла должно быть самое большее используемое завершение цикла for оператора один |
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 C:2004 (-misra2)
| Check MISRA AC AGC (-misra-ac-agc)
| Check MISRA C:2012 (-misra3)