Следующие таблицы приводят MISRA C®:2004, кодирующий правила, что Polyspace®, кодирующий средство проверки правил, поддерживает. Детали относительно того, как программное обеспечение проверяет отдельные правила и любые ограничения на осциллограф проверки, описаны в “столбце” Спецификации Polyspace.
Примечание
Polyspace, кодирующий средство проверки правил:
Поддержки MISRA-C:2004 Техническое Исправление 1 для правил 4.1, 5.1, 5.3, 6.1, 6.3, 7.1, 9.2, 10.5, 12.6, 13.5, и 15.0.
Правила проверок заданы Инструкциями по AGC AC MISRA для Приложения MISRA-C:2004 в Контексте Автоматической Генерации кода.
Программное обеспечение сообщает о большинстве нарушений во время фазы компиляции анализа. Однако программное обеспечение обнаруживает нарушения правил 9.1 (Non-initialized variable
), 12.11 (одна из проверок переполнения) использование -scalar-overflows-checks signed-and-unsigned
), 13.7 (мертвый код), 14.1 (мертвый код), 16.2 и 21.1 во время анализа кода и отчетов эти нарушения как ошибки времени выполнения.
Примечание
О некоторых нарушениях правил 13.7 и 14.1 сообщают во время фазы компиляции анализа.
Если вы ожидаете нарушение правила, но не видите его, выезд, Кодирующий Стандартные Нарушения, Не Отображенные.
N. | Определение MISRA® | Сообщения в файле отчета | Реализация Polyspace |
---|---|---|---|
1.1 | Весь код должен приспособить ISO® 9899:1990 “Языкам программирования - C”, исправил и откорректированный ISO/IEC 9899/COR1:1995, ISO/IEC 9899/AMD1:1995 и ISO/IEC 9899/COR2:1996. | Текст
| Все поддерживаемые расширения приводят к нарушению этого правила MISRA. Стандартные сообщения ошибки компиляции не приводят к нарушению этого MISRA, управляют и остаются неизменными. |
N. | Определение MISRA | Сообщения в файле отчета | Реализация Polyspace |
---|---|---|---|
2.1 | Ассемблер должен инкапсулироваться и изолироваться. | Ассемблер должен инкапсулироваться и изолироваться. | Никакие предупреждения, если код инкапсулируется в следующем:
|
2.2 | Исходный код должен только использовать/* */комментарии стиля | Комментарии C++ не должны использоваться. | Комментарии C++ обработаны как комментарии, но вывод к нарушению этого правила MISRA Примечание: Это правило не может быть аннотировано в исходном коде. |
2.3 | Последовательность символов/* не должна использоваться в рамках комментария | Последовательность символов/* не должна появляться в рамках комментария. | Это нарушение правила также повышено, когда последовательность символов/* в C++ комментирует. Примечание: Это правило не может быть аннотировано в исходном коде. |
2.4 | Разделы кода не должны быть то, " закомментировал" | Разделы кода не должны быть то, " закомментировал" | Средство проверки использует внутреннюю эвристику, чтобы обнаружить закоментированный код. Например, символы, такие как Средство проверки не отмечает следующие комментарии, даже если они содержат код:
Средство проверки полагает, что эти комментарии предназначаются для целей документации или вводимый сознательно с некоторой предусмотрительностью. |
Правило | Определение MISRA | Сообщения в файле отчета | Реализация Polyspace |
---|---|---|---|
3.4 | Все использование #pragma директивы должно быть зарегистрировано и объяснено. | Все использование #pragma директивы должно быть зарегистрировано и объяснено. | Чтобы проверять это правило, необходимо перечислить прагмы, которые позволены в исходных файлах при помощи опции Allowed pragmas (-allowed-pragmas) . Если Polyspace находит прагму не в позволенном списке прагм, нарушение повышено. |
N. | Определение MISRA | Сообщения в файле отчета | Реализация Polyspace |
---|---|---|---|
4.1 | Только те escape-последовательности, которые заданы в стандарте ISO C, должны использоваться. | \<символ> не является escape-последовательностью ISO C Только те escape-последовательности, которые заданы в стандарте ISO C, буду использоваться. | |
4.2 | Trigraphs не должен использоваться. | Trigraphs не должен использоваться. | Trigraphs обработаны и преобразованы в эквивалентный символ, но вывод к нарушению правила MISRA |
N. | Определение MISRA | Сообщения в файле отчета | Реализация Polyspace |
---|---|---|---|
5.1 | Идентификаторы (внутренний и внешний) не должны использовать значение больше чем 31 символа | Идентификатор 'XX' не должен использовать значение больше чем 31 символа. | Все идентификаторы (глобальная переменная, статическая и локальная), проверяются. Для более легкого анализа средство проверки правила показывает все идентификаторы, которые имеют тот же первый 31 символ как одно нарушение правила. Вы видите все экземпляры конфликтных имен идентификатора в конечном счете история того нарушения правила. Это средство проверки деактивировано в Polyspace по умолчанию как Вы Анализ кода. Смотрите Средства проверки, Деактивированные в Polyspace, когда Вы Кодируете Анализ По умолчанию (Polyspace Bug Finder Access). |
5.2 | Идентификаторы во внутреннем осциллографе не должны использовать то же имя в качестве идентификатора во внешнем осциллографе, и поэтому скрыть тот идентификатор. |
| Принимает, что правило 8.1 не нарушено. |
5.3 | Имя определения типа должно быть уникальным идентификатором | {имя определения типа} '%s' не должно быть снова использовано. (уже используемый в качестве {имя определения типа} в %s: D | Предупреждение, когда имя определения типа снова используется как другое имя идентификатора. |
5.4 | Имя тега должно быть уникальным идентификатором | {имя тега} '%s' не должно быть снова использовано. (уже используемый в качестве {имени тега} в %s: D | Предупреждение, когда имя тега снова используется как другое имя идентификатора Это средство проверки деактивировано в Polyspace по умолчанию как Вы Анализ кода. Смотрите Средства проверки, Деактивированные в Polyspace, когда Вы Кодируете Анализ По умолчанию (Polyspace Bug Finder Access). |
5.5 | Никакой объектный или функциональный идентификатор со статической продолжительностью хранения не должен быть снова использован. | {статический идентификатор/название параметра} ’%s’ не должен быть снова использован. (уже используемый в качестве {статический идентификатор/название параметра} со статической продолжительностью хранения в %s: D | Предупреждение, когда статическое имя снова используется как другое имя идентификатора Bug Finder и Программа автоматического доказательства Кода проверяют это правило кодирования по-другому. Исследования могут привести к различным результатам. |
5.6 | Никакой идентификатор в одном пространстве имен не должен иметь то же написание как идентификатор в другом пространстве имен, за исключением имен члена профсоюза и структуры. | {имя элемента} '%s' не должно быть снова использовано. (уже используемый в качестве {имени элемента} в %s: D | Предупреждение, когда Это средство проверки деактивировано в Polyspace по умолчанию как Вы Анализ кода. Смотрите Средства проверки, Деактивированные в Polyspace, когда Вы Кодируете Анализ По умолчанию (Polyspace Bug Finder Access). |
5.7 | Никакое имя идентификатора не должно быть снова использовано. | {идентификатор} '%s' не должен быть снова использован. (уже используемый в качестве {идентификатора} в %s: D | Никакое нарушение, о котором сообщают, когда:
|
N. | Определение MISRA | Сообщения в файле отчета | Реализация Polyspace |
---|---|---|---|
6.1 | Простой символьный тип должен использоваться только для устройства хранения данных и использования символьных значений | Только допустимые операторы на простом char '= ', '==' или'! =' операторы, явные броски к целочисленным типам и'?' (для 2-х и 3-х операндов) | Предупреждение, когда простой char используется с оператором кроме =, ==! =, явные броски к целочисленным типам, или как вторые или третьи операнды? оператор. |
6.2 | Подписанный и символьный тип без знака должен использоваться только для устройства хранения данных и использования числовых значений. |
| Предупреждение, если значение простого char типа неявно преобразовано в значение символа со знаком типа или char без знака. |
6.3 | определения типов, которые указывают на размер и со знаком, должны использоваться вместо основных типов | определения типов, которые указывают на размер и со знаком, должны использоваться вместо основных типов. | Никакое предупреждение не дано в определении определения типа. |
6.4 | Битовые поля должны только быть заданы, чтобы иметь тип int без знака или подписанный int. | Битовые поля должны только быть заданы, чтобы иметь тип int без знака или подписанный int. | |
6.5 | Битовые поля типа подписались, int должен быть по крайней мере 2 бита длиной. | Битовые поля типа подписались, int должен быть по крайней мере 2 бита длиной. | Никакое предупреждение на анонимных международных битовых полях со знаком ширины 0 - Расширенный ко всем битовым полям со знаком размера <= 1 (если Правило 6.4 нарушено). |
N. | Определение MISRA | Сообщения в файле отчета | Реализация Polyspace |
---|---|---|---|
7.1 | Восьмеричные константы (кроме нуля) и восьмеричные escape-последовательности не должны использоваться. |
|
N. | Определение MISRA | Сообщения в файле отчета | Реализация Polyspace |
---|---|---|---|
8.1 | Функции должны иметь объявления прототипа, и прототип должен отобразиться в обоих функциональным определением и вызовом. |
| Прототип, видимый в вызове, должен быть завершен. |
8.2 | Каждый раз, когда объект или функция объявлены или заданы, ее тип должен быть явным образом утвержден | Каждый раз, когда объект или функция объявлены или заданы, ее тип должен быть явным образом утвержден. | |
8.3 | Для каждого параметра функции тип, данный в объявлении и определении, должен быть идентичным, и типы возврата должны также быть идентичными. | Определение функции 'XX' несовместимый с ее объявлением. | Принимает, что правило 8.1 не нарушено. Правило ограничивается совместимыми типами. Может быть превращен к Прочь |
8.4 | Если объекты или функции будут объявлены несколько раз, то их типы должны быть совместимыми. |
| Нарушения этого правила могут быть сгенерированы во время фазы ссылки. Bug Finder и Программа автоматического доказательства Кода проверяют это правило кодирования по-другому. Исследования могут привести к различным результатам. Это средство проверки деактивировано в Polyspace по умолчанию как Вы Анализ кода. Смотрите Средства проверки, Деактивированные в Polyspace, когда Вы Кодируете Анализ По умолчанию (Polyspace Bug Finder Access). |
8.5 | Не должно быть никаких определений объектов или функций в заголовочном файле |
| Предварительные определения рассматриваются как определения. Для объектов с осциллографом файла предварительными определениями являются объявления что:
|
8.6 | Функции должны всегда объявляться в осциллографе файла. | Функция 'XX' должна быть объявлена в осциллографе файла. | Это правило сопоставляет с ID ISO/IEC TS 17961
|
8.7 | Объекты должны быть заданы в области действия блока, если к ним только получат доступ из одной функции | Объект 'XX' должен быть объявлен в области действия блока. | Ограниченный статическими объектами. |
8.8 | Внешний объект или функция должны быть объявлены в одном файле и только одном файле | Функция/Объект 'XX' имеет внешние объявления в нескольких файлах. | Ограниченный явными объявлениями экстерна (предварительные определения проигнорированы). Polyspace полагает, что переменные или функции объявили Bug Finder и Программа автоматического доказательства Кода проверяют это правило кодирования по-другому. Исследования могут привести к различным результатам. Это средство проверки деактивировано в Polyspace по умолчанию как Вы Анализ кода. Смотрите Средства проверки, Деактивированные в Polyspace, когда Вы Кодируете Анализ По умолчанию (Polyspace Bug Finder Access). |
8.9 | Идентификатор с внешним рычажным устройством должен иметь точно одно внешнее определение. |
| Средство проверки отмечает повторные определения, только если определения происходят в различных файлах. Никакие предупреждения не появляются на предопределенных символах. Bug Finder и Программа автоматического доказательства Кода проверяют это правило кодирования по-другому. Исследования могут привести к различным результатам. Это средство проверки деактивировано в Polyspace по умолчанию как Вы Анализ кода. Смотрите Средства проверки, Деактивированные в Polyspace, когда Вы Кодируете Анализ По умолчанию (Polyspace Bug Finder Access). |
8.10 | Все объявления и определения объектов или функций в осциллографе файла должны иметь внутреннее рычажное устройство, если внешнее рычажное устройство не будет требоваться | Функция/Переменная XX должна иметь внутреннее рычажное устройство. | Принимает, что 8.1 не нарушен. Никакое предупреждение, если 0 использования. Если ваш код не содержит Bug Finder и Программа автоматического доказательства Кода проверяют это правило кодирования по-другому. Исследования могут привести к различным результатам. Это средство проверки деактивировано в Polyspace по умолчанию как Вы Анализ кода. Смотрите Средства проверки, Деактивированные в Polyspace, когда Вы Кодируете Анализ По умолчанию (Polyspace Bug Finder Access). |
8.11 | Статический спецификатор класса памяти должен использоваться в определениях и объявлениях объектов и функций, которые имеют внутреннее рычажное устройство | статический спецификатор класса памяти должен использоваться на внутреннем символе рычажного устройства XX. | |
8.12 | Когда массив будет объявлен с внешним рычажным устройством, его размер должен быть утвержден явным образом или задан неявно инициализацией | Размер массива 'XX' должен быть явным образом утвержден. |
N. | Определение MISRA | Сообщения в файле отчета | Реализация Polyspace |
---|---|---|---|
9.1 | Все автоматические переменные должны быть присвоены значение прежде чем быть используемым. | Проверяемый во время анализа кода. Заканчиваются нарушения, отображенные как Неинициализированная переменная. Bug Finder и Программа автоматического доказательства Кода проверяют это правило кодирования по-другому. Исследования могут привести к различным результатам. В Программе автоматического доказательства Кода можно также видеть различие в результатах на основе выбора для опции | |
9.2 | Фигурные скобки должны использоваться, чтобы указать и совпадать со структурой в ненулевой инициализации массивов и структурами. | Фигурные скобки должны использоваться, чтобы указать и совпадать со структурой в ненулевой инициализации массивов и структурами. | |
9.3 | В списке перечислителей = построение не должно использоваться, чтобы явным образом инициализировать члены кроме первого, если все элементы не будут явным образом инициализированы. | В списке перечислителей = построение не должно использоваться, чтобы явным образом инициализировать члены кроме первого, если все элементы не будут явным образом инициализированы. |
N. | Определение MISRA | Сообщения в файле отчета | Реализация Polyspace |
---|---|---|---|
10.1 | Значение выражения целочисленного типа не должно быть неявно преобразовано в различный базовый тип если:
|
| ANSI C порядок базовых типов (символ со знаком, короткий, международный, долго), задает это, T2 более широк, чем T1, если T2 имеет справа T1 или T2 = T1. Та же интерпретация применяется на версию без знака базовых типов. Выражение bool или перечислимых типов имеет int как лежащий в основе типа. Простой char, возможно, подписался или базовый тип без знака (в зависимости от целевой настройки Polyspace или установки опции). Базовый тип простого выражения struct.bitfield является базовым типом, используемым в определении битового поля, ширина битового поля не является лексемой во внимание, и это принимает, что только со знаком | int без знака используется для битового поля (Правило 6.4). Никакое нарушение, о котором сообщают, когда:
Никакое нарушение не сообщило, когда следующее является всей истиной:
Никакое нарушение, о котором сообщают относительно операций включающие указатели. Преобразования констант, как сообщают, для этих случаев не стараются не отмечать слишком много нарушений. Если константа может быть представлена в обоих исходный и конвертированный тип, преобразование является меньшим количеством проблемы. |
10.2 | Значение выражения типа с плавающей точкой не должно быть неявно преобразовано в другой тип если
|
| ANSI C порядок базовых типов (плавание, дважды) задает это, T2 более широк, чем T1, если T2 имеет справа T1 или T2 = T1. Никакое нарушение, о котором сообщают, когда:
|
10.3 | Значение сложного выражения целочисленного типа может только быть брошено к типу, который является более узким и того же самого, со знаком как базовый тип выражения | Сложное выражение базового типа XX может только быть брошено к более узкому целочисленному типу того же самого со знаком, однако целевой тип XX. |
|
10.4 | Значение сложного выражения типа плавающего может только быть брошено к более узкому типу с плавающей точкой | Сложное выражение XX типов может только быть брошено к более узкому типу с плавающей точкой, однако целевой тип XX. | ANSI C порядок базовых типов (плавание, дважды) задает это, T1 является более узким, чем T2, если T2 имеет справа T1 или T2 = T1. |
10.5 | Если побитовый оператор ~ и <<будет применен к операнду базового типа символьное или короткое целое без знака без знака, то результат должен быть сразу брошен к базовому типу операнда | Поразрядно [<<| ~] применяется к операнду базового типа [без знака char|unsigned короткий], результат должен быть сразу брошен к базовому типу. | |
10.6 | Суффикс “U” должен быть применен ко всем константам типов без знака | Нет явный 'U снабжают суффиксом на константах типа без знака. | Предупреждая, когда тип, определенный из значения и основы (восьмеричный, десятичный или шестнадцатеричный), без знака и нет никакого суффиксного Например, когда размер int a = 2147483648; Существует различие между десятичными и шестнадцатеричными константами когда |
N. | Определение MISRA | Сообщения в файле отчета | Реализация Polyspace |
---|---|---|---|
11.1 | Преобразование не должно выполняться между указателем на функцию и любым типом кроме целочисленного типа | Преобразование не должно выполняться между указателем на функцию и любым типом кроме целочисленного типа. | Броски и неявные преобразования, включающие указатель функции. Броски или неявные преобразования из |
11.2 | Преобразование не должно выполняться между указателем на объект и любым типом кроме целочисленного типа, другим указателем на тип объекта или указателем на пустоту | Преобразование не должно выполняться между указателем на объект и любым типом кроме целочисленного типа, другим указателем на тип объекта или указателем на пустоту. | На потере спецификатора существует также предупреждение Это правило сопоставляет с ID ISO/IEC TS 17961
|
11.3 | Бросок не должен быть выполнен между типом указателя и целочисленным типом | Бросок не должен быть выполнен между типом указателя и целочисленным типом. | Исключение на нулевой константе. Расширенный ко всем преобразованиям Это правило сопоставляет с ID ISO/IEC TS 17961
|
11.4 | Бросок не должен быть выполнен между указателем на тип объекта и различным указателем на тип объекта. | Бросок не должен быть выполнен между указателем на тип объекта и различным указателем на тип объекта. | |
11.5 | Бросок не должен выполняться, который удаляет любой const или энергозависимую проверку от типа, обращенного указателем | Бросок не должен выполняться, который удаляет любой const или энергозависимую проверку от типа, обращенного указателем | Расширенный ко всем преобразованиям |
N. | Определение MISRA | Сообщения в файле отчета | Реализация Polyspace |
---|---|---|---|
12.1 | Ограниченная зависимость должна быть помещена в правила приоритета оператора К в выражениях | Ограниченная зависимость должна быть помещена в правила приоритета оператора К в выражениях | |
12.2 | Значение выражения должно быть тем же самым согласно любому порядку оценки, которую разрешает стандарт. |
| Проверка правила 12.2 принимает, что никакое присвоение в выражениях, которые дают к булевым значениям (правило 13.1). Выражение является простым выражением символов. |
12.3 |
|
| Никакое предупреждение на энергозависимых доступах |
12.4 | Правый операнд логического && или || оператор не должен содержать побочные эффекты. | Правый операнд логического && или || оператор не должен содержать побочные эффекты. | Никакое предупреждение на энергозависимых доступах |
12.5 | Операнды логического && или || должны быть первичными выражениями. |
| Во время предварительной обработки нарушения этого правила обнаруживаются по выражениям в #if директивах. Позволенное исключение на ассоциативно (&& b && c), (|| b || c). |
12.6 | Операнды логических операторов (&&, || и!) должно быть эффективно булевым. Выражение, которые являются эффективно булевыми, не должно использоваться в качестве операндов к операторам кроме (&&, || или!). |
| Операнд логического оператора должен быть булевым типом данных. Несмотря на то, что стандарт C явным образом не задает булев тип данных, стандарт неявно принимает использование булева типа данных. Некоторые операторы могут возвратить подобные булевской переменной выражения, например, Рассмотрите следующий код: unsigned char flag; if (!flag) Средство проверки правила сообщает о нарушении правила 12.6: Operand of '!' logical operator should be effectively Boolean. flag не булевская переменная, а unsigned char .Чтобы быть совместимым с правилом 12.6, код должен быть переписан любой как if (!( flag != 0)) if (flag == 0) Использование опции |
12.7 | Побитовые операторы не должны быть применены к операндам, базовый тип которых подписывается |
| Базовый тип для целого числа подписывается когда:
|
12.8 | Правый операнд оператора сдвига должен находиться между нулем и меньше, чем ширина в битах базового типа левого операнда. |
| Числа, которыми управляют в предварительной обработке директив, 64 бита шириной так, чтобы допустимая область значений сдвига была между 0 и 63 Проверка также расширена на битовые поля с шириной поля или шириной базового типа, когда это в сложном выражении |
12.9 | Оператор унарный минус не должен быть применен к выражению, базовый тип которого без знака. |
| Базовый тип для целого числа подписывается когда:
|
12.10 | Оператор запятой не должен использоваться. | Оператор запятой не должен использоваться. | |
12.11 | Оценка постоянного выражения без знака не должна вести, чтобы повториться. | Оценка постоянных выражений беззнаковых целых чисел не должна вести, чтобы повториться. | |
12.12 | Базовые битные представления значений с плавающей точкой не должны использоваться. | Базовые битные представления значений с плавающей точкой не должны использоваться. | Предупреждение, когда:
|
12.13 | Шаг (++) и декремент (-) операторы не должен быть смешан с другими операторами в выражении | Шаг (++) и декремент (-) операторы не должен быть смешан с другими операторами в выражении | Предупреждение, когда ++ или - операторы не используются одни. |
N. | Определение MISRA | Сообщения в файле отчета | Реализация Polyspace |
---|---|---|---|
13.1 | Операторы присваивания не должны использоваться в выражениях то выражение булевы значения. | Операторы присваивания не должны использоваться в выражениях то выражение булевы значения. |
|
13.2 | Тесты значения против нуля должны быть сделаны явными, если операнд не является эффективно булевым | Тесты значения против нуля должны быть сделаны явными, если операнд не является эффективно булевым | Никакое предупреждение не дано на целочисленных константах. Пример: если (2) Использование опции |
13.3 | Выражения с плавающей точкой не должны быть протестированы на равенство или неравенство. | Выражения с плавающей точкой не должны быть протестированы на равенство или неравенство. | Предупреждение на направляет тесты только. |
13.4 | Выражение управления для оператора не должно содержать объекты типа с плавающей точкой | Выражение управления для оператора не должно содержать объекты типа с плавающей точкой | Если для индекса переменный символ, проверял, что это не плавание. |
13.5 | Три выражения для оператора должны быть затронуты только с управлением циклом |
| Проверял, является ли индекс (V) цикла for переменным символом; проверял, ли V последняя присвоенная переменная в первом выражении (если есть). Проверял, ли, в первом выражении, если есть присвоение V; проверял, должно ли в 2-м выражении, если есть быть сравнение V; Проверял, должно ли в 3-м выражении, если есть быть присвоение V. |
13.6 | Числовые переменные, используемые в цикле for для подсчета итерации, не должны быть изменены в теле цикла. | Числовые переменные, используемые в цикле for для подсчета итерации, не должны быть изменены в теле цикла. | Обнаружьте только прямые присвоения, если индекс цикла for известен и если это - переменный символ. |
13.7 | Логические операции, результаты которых являются инвариантными, не должны быть разрешены |
| Во время компиляции проверяйте сравнения по крайней мере с одним постоянным операндом. Bug Finder и Программа автоматического доказательства Кода проверяют это правило кодирования по-другому. Исследования могут привести к различным результатам.
В Программе автоматического доказательства Кода можно также видеть различие в результатах на основе выбора для опции Нарушение правила появляется, когда вы проверяете ли enum ec {RED, BLUE, GREEN} col; for(col=RED; col<=GREEN; col++) {} enum переменная может потенциально повториться, когда постепенно увеличено вне ее области значений, и условие цикла может быть всегда верным. Чтобы избежать нарушения правила, можно бросить перечисление до целого числа перед сравнением, например:enum ec {RED, BLUE, GREEN} col; for(col=RED; (int)col<=GREEN; col++ ) {} |
N. | Определение MISRA | Сообщения в файле отчета | Реализация Polyspace |
---|---|---|---|
14.1 | Не должно быть никакого недостижимого кода. | Не должно быть никакого недостижимого кода. | Bug Finder и Программа автоматического доказательства Кода проверяют это правило кодирования по-другому. Исследования могут привести к различным результатам. |
14.2 | Все непустые операторы должны или иметь по крайней мере один побочный эффект однако выполняемым или заставить поток управления изменяться | Все непустые операторы должны быть также:
| |
14.3 | Перед предварительной обработкой пустой оператор должен произойти на линии отдельно; это может сопровождаться комментарием при условии, что первый символ после пустого оператора является пробельным символом. | Пустой оператор должен появиться на линии отдельно | Мы принимаем это a''; пустой оператор, когда это - первый символ на линии (исключая комментарии). Правило нарушено когда:
|
14.4 | Оператор перехода не должен использоваться. | Оператор перехода не должен использоваться. | |
14.5 | Оператор continue не должен использоваться. | Оператор continue не должен использоваться. | |
14.6 | Для любого оператора цикла должно быть самое большее используемое завершение цикла for одного оператора завершения | Для любого оператора цикла должно быть самое большее используемое завершение цикла for одного оператора завершения | |
14.7 | Функция должна иметь одну точку выхода в конце функции | Функция должна иметь одну точку выхода в конце функции | |
14.8 | Оператор, формирующий тело переключателя, в то время как, делает , в то время как или для оператора будет составной оператор |
| |
14.9 | Если (выражение) создают, буду сопровождаться составным оператором. Еще ключевое слово должно сопровождаться или составным оператором или другим оператором if |
| |
14.10 | Все, если еще, если построения должны содержать итоговое выражение else. | Все, если еще, если построения должны содержать итоговое выражение else. |
N. | Определение MISRA | Сообщения в файле отчета | Реализация Polyspace |
---|---|---|---|
15.0 | Синтаксис переключателя MISRA C должен использоваться. | синтаксис операторов switch нормативные ограничения. | Предупреждение на объявлениях или любых операторах перед первым случаем переключателя. Предупреждение на этикетке или операторах скачка в теле случаев переключателя. На следующем примере правило отображено в файле журнала в линии 3: 1 ... 2 switch(index) { 3 var = var + 1; // RULE 15.0 // violated 4case 1: ... Код между оператором switch и первым случаем проверяется как мертвый код Polyspace. Это следует за поведением стандарта ANSI. Это правило не рассматривается как необходимое правило в правилах MISRA C:2004 для сгенерированного кода. В сгенерированном коде, если вы находите нарушение правила 15.0, которое одновременно не нарушает более позднее правило в этой группе, выровняйте по ширине нарушение с соответствующими комментариями. |
15.1 | Метка переключателя должна только использоваться, когда наиболее тесно заключающий составной оператор будет телом оператора switch | Метка переключателя должна только использоваться, когда наиболее тесно заключающий составной оператор будет телом оператора switch | |
15.2 | Безусловный оператор завершения должен отключить каждый непустой пункт переключателя | Безусловный оператор завершения должен отключить каждый непустой пункт переключателя | Предупреждение для каждого несовместимого пункта случая. |
15.3 | Итоговый пункт оператора switch должен быть пунктом по умолчанию | Итоговый пункт оператора switch должен быть пунктом по умолчанию | |
15.4 | Выражение переключателя не должно представлять значение, которое является эффективно булевым | Выражение переключателя не должно представлять значение, которое является эффективно булевым | Использование опции |
15.5 | Каждый оператор switch должен иметь по крайней мере один пункт случая | Каждый оператор switch должен иметь по крайней мере один пункт случая |
N. | Определение MISRA | Сообщения в файле отчета | Реализация Polyspace |
---|---|---|---|
16.1 | Функции не должны быть заданы с переменными количествами аргументов. | Функция XX не должна быть задана как varargs. | |
16.2 | Функции не должны вызывать себя, ни один прямо или косвенно. | Функция %s не должна вызывать себя. | Средство проверки сообщает о каждой функции, которая вызывает себя, прямо или косвенно. Даже если несколько функций вовлечены в один цикл рекурсии, о каждой функции индивидуально сообщают. Можно вычислить общее количество циклов рекурсии с помощью метрики сложности кода |
16.3 | Идентификаторы должны быть даны для всех параметров в объявлении прототипа функции. | Идентификаторы должны быть даны для всех параметров в объявлении прототипа функции. | Принимает, что Правило 8.6 не нарушено. |
16.4 | Идентификаторы, используемые в объявлении и определении функции, должны быть идентичными. | Идентификаторы, используемые в объявлении и определении функции, должны быть идентичными. | Принимает, что правила 8.8, 8.1 и 16.3 не нарушены. Все случаи обнаруживаются. |
16.5 | Функции без параметров должны быть объявлены с типом параметра пусто. | Функции без параметров должны быть объявлены с типом параметра пусто. | Определения также проверяются. |
16.6 | Количество аргументов, переданных функции, должно совпадать с количеством параметров. |
| Принимает, что правило 8.1 не нарушено. Это правило сопоставляет с ID ISO/IEC TS 17961
|
16.7 | Параметр указателя в прототипе функции должен быть объявлен как указатель на | Параметр указателя в прототипе функции должен быть объявлен как указатель на | Предупреждение, если non- |
16.8 | Все выходные пути от функции с непустым типом возврата должны иметь явный оператор возврата с выражением. | Пропавшие без вести возвращаемого значения для непустой функции XX. | Предупреждение, когда непустая функция не отключена с безусловным возвратом с выражением. |
16.9 | Функциональный идентификатор должен только использоваться или с предыдущим &, или с заключенным в скобки списком параметров, который может быть пустым. | Функциональному идентификатору XX должен предшествовать a & или сопровождать список параметров. | |
16.10 | Если функция возвратит информацию об ошибке, то та информация об ошибке должна быть протестирована. | Если функция возвратит информацию об ошибке, то та информация об ошибке должна быть протестирована. | Средство проверки отмечает функции с помощью non- Средство проверки не отмечает функции |
N. | Определение MISRA | Сообщения в файле отчета | Реализация Polyspace |
---|---|---|---|
17.1 | Адресная арифметика с указателями должна только быть применена к указателям, которые обращаются к элементу массива или элементу массива. | Адресная арифметика с указателями должна только быть применена к указателям, которые обращаются к элементу массива или элементу массива. | |
17.2 | Вычитание указателя должно только быть применено к указателям, которые обращаются к элементам того же массива | Вычитание указателя должно только быть применено к указателям, которые обращаются к элементам того же массива. | |
17.3 | >,> =, <<= не буду применен к типам указателей кроме того, где они указывают на тот же массив. | >,> =, <<= не буду применен к типам указателей кроме того, где они указывают на тот же массив. | |
17.4 | Индексация массива должна быть единственной позволенной формой адресной арифметики с указателями. | Индексация массива должна быть единственной позволенной формой адресной арифметики с указателями. | Предупреждение на:
|
17.5 | Тип не должен содержать больше чем 2 уровня косвенности указателя | Тип не должен содержать больше чем 2 уровня косвенности указателя | |
17.6 | Адрес объекта с автоматическим хранением не должен быть присвоен объекту, который может сохраниться после того, как объект прекратил существование. | Указатель на параметр является недопустимым возвращаемым значением. Указатель на локальную переменную является недопустимым возвращаемым значением. | Предупреждение при присвоении адреса глобальной переменной, возврате адреса локальной переменной или возврате адреса параметра. Это правило сопоставляет с ID ISO/IEC TS 17961
|
N. | Определение MISRA | Сообщения в файле отчета | Реализация Polyspace |
---|---|---|---|
18.1 | Вся структура или типы объединения должны быть завершены в конце модуля перевода. | Вся структура или типы объединения должны быть завершены в конце модуля перевода. | Предупреждение для всех неполных объявлений структур или объединений. |
18.2 | Объект не должен быть присвоен перекрывающемуся объекту. |
| |
18.4 | Объединения не должны использоваться | Объединения не должны использоваться. |
N. | Определение MISRA | Сообщения в файле отчета | Реализация Polyspace |
---|---|---|---|
19.1 | Операторам #include в файле должны только предшествовать другие директивы препроцессоров или комментарии | Операторам #include в файле должны только предшествовать другие директивы препроцессоров или комментарии | Сообщение отображено, когда #include директиве предшествуют другие вещи, чем директивы препроцессору, комментарии, пробелы или “новые строки”. |
19.2 | Нестандартные символы не должны происходить на имена заголовочного файла в #include директивах |
| |
19.3 | #include директива должна сопровождаться или <имя файла> или последовательность "имени файла". |
| |
19.4 | C макросы только расширюсь до заключенного в фигурные скобки инициализатора, константы, заключенного в скобки выражения, спецификатора типа, спецификатора класса памяти, или построение "делает в то время как нуль". | Макрос' <имя>' не расширяется до совместимого построения. | Мы принимаем, что макроопределение не нарушает это правило, когда это расширяется до:
|
19.5 | Макросы не должны быть #defined и #undefd в блоке. |
| |
19.6 | #undef не должен использоваться. |
| |
19.7 | Функция должна использоваться в предпочтении к функциональному подобному макросу. | Функция должна использоваться в предпочтении к функциональному подобному макросу | Обменивайтесь сообщениями на всех подобных функции макроопределениях. |
19.8 | Подобный функции макрос не должен быть вызван безо всех его аргументов |
| |
19.9 | Аргументы к подобному функции макросу не должны содержать лексемы, которые похожи на предварительную обработку директив. | Макро-аргумент не должен быть похожим на директиву предварительной обработки. | Это правило обнаруживается, как нарушено, когда '#' символ появляется в макро-аргументе (вне строковой или символьной константы) |
19.10 | В определении подобного функции макроса каждый экземпляр параметра должен быть заключен в круглые скобки, если это не будет использоваться в качестве операнда # или ##. | Экземпляр параметра должен быть заключен в круглые скобки. | Если Программное обеспечение не генерирует предупреждение, если параметр снова используется в качестве аргумента функционального или подобного функции макроса. Например, рассмотрите параметр x. Программное обеспечение не генерирует предупреждение если |
19.11 | Все макро-идентификаторы в директивах препроцессору должны быть заданы перед использованием, кроме #ifdef и #ifndef директив препроцессору и заданного () оператор. | '<имя>' не задано. | |
19.12 | Должно быть самое большее одно вхождение # или ## операторов препроцессора в одном макроопределении. | Больше чем одно вхождение # или ## операторов препроцессора. | |
19.13 | # и ## операторы препроцессора не должны использоваться | Обменивайтесь сообщениями на определениях макросов с помощью # или ## операторы | |
19.14 | Заданный оператор препроцессора должен только использоваться в одной из двух стандартных форм. | 'заданный' без идентификатора. | |
19.15 | Меры предосторожности должны быть приняты для того, чтобы предотвратить содержимое заголовочного файла, включаемого дважды. | Меры предосторожности должны быть приняты для того, чтобы предотвратить несколько включений. | Когда заголовочный файл отформатирован как, #ifndef <control macro> #define <control macro> <contents> #endif или, #ifndef <control macro> #error ... #else #define <control macro> <contents> #endif это принято, что меры предосторожности были приняты, чтобы предотвратить несколько включений. В противном случае нарушение этого правила MISRA обнаруживается. |
19.16 | Предварительная обработка директив должна быть синтаксически значимой, даже когда исключено препроцессором. | директива не синтаксически значима. | |
19.17 | Весь #else, #elif и #endif директивы препроцессору должен находиться в том же файле как #if или #ifdef директива, с которой они связаны. |
|
N. | Определение MISRA | Сообщения в файле отчета | Реализация Polyspace |
---|---|---|---|
20.1 | Зарезервированные идентификаторы, макросы и функции в стандартной библиотеке, не должны быть заданы, переопределены или не определены. |
| |
20.2 | Имена стандартных макросов библиотеки, объектов и функций не должны быть снова использованы. | Идентификатор XX не должен использоваться. | В случае, если макрос, имя которого соответствует стандартному макросу библиотеки, объекту или функции, задан, правило, которое обнаруживается, как нарушено, 20.1. Предварительные определения рассматриваются как определения. Для объектов с осциллографом файла предварительными определениями являются объявления что:
|
20.3 | Валидность значений, переданных библиотечным функциям, должна проверяться. | Валидность значений, переданных библиотечным функциям, должна проверяться | Предупреждение для аргумента в библиотечной функции вызывает, если следующее является всей истиной:
Библиотечная функция может быть одним из следующего: Bug Finder и Программа автоматического доказательства Кода проверяют это правило по-другому. Анализ может привести к различным результатам. |
20.4 | Динамическое выделение памяти кучи не должно использоваться. |
| В случае, если динамические функции выделения памяти кучи являются на самом деле макросами, и макрос расширен в коде, это правило обнаруживается, как нарушено. Принимает, что правило 20.2 не нарушено. |
20.5 | Ошибочный индикатор errno не должен использоваться | Ошибочный индикатор errno не должен использоваться | Принимает, что правило 20.2 не нарушено |
20.6 | Макрос offsetof, в библиотеке <stddef.h>, не должен использоваться. |
| Принимает, что правило 20.2 не нарушено |
20.7 | setjmp макрос и функция longjmp не должны использоваться. |
| В случае, если функция longjmp является на самом деле макросом, и макрос расширен в коде, это правило обнаруживается, как нарушено. Принимает, что правило 20.2 не нарушено |
20.8 | Погрузочно-разгрузочное оборудование сигнала <signal.h> не должно использоваться. |
| В случае, если некоторые функции сигнала являются на самом деле макросами и расширены в коде, это правило обнаруживается, как нарушено. Принимает, что правило 20.2 не нарушено |
20.9 | Библиотекой ввода/вывода <stdio.h> нельзя пользоваться в производственном коде. |
| В случае, если библиотечные функции ввода/вывода являются на самом деле макросами и расширены в коде, это правило обнаруживается, как нарушено. Принимает, что правило 20.2 не нарушено |
20.10 | Библиотечные функции atof, atoi и атолл от библиотеки <stdlib.h> не должны использоваться. |
| В случае, если atof, atoi и функции атолла являются на самом деле макросами и расширены, это правило обнаруживается, как нарушено. Принимает, что правило 20.2 не нарушено |
20.11 | Аварийное прекращение работы библиотечных функций, выход, getenv и система от библиотеки <stdlib.h> не должны использоваться. |
| В случае, если аварийное прекращение работы, выход, getenv и системные функции являются на самом деле макросами и расширены, это правило обнаруживается, как нарушено. Принимает, что правило 20.2 не нарушено |
20.12 | Функции обработки времени библиотеки <time.h> не должны использоваться. |
| В случае, если функции обработки времени являются на самом деле макросами и расширены, это правило обнаруживается, как нарушено. Принимает, что правило 20.2 не нарушено |
N. | Определение MISRA | Сообщения в файле отчета | Реализация Polyspace |
---|---|---|---|
21.1 | Минимизация отказов во время выполнения должна быть обеспечена при помощи по крайней мере одного из:
| Сделанный Polyspace. Bug Finder и Программа автоматического доказательства Кода проверяют это правило кодирования по-другому. Исследования могут привести к различным результатам. В Программе автоматического доказательства Кода можно также видеть различие в результатах на основе выбора для опции |
Polyspace, кодирующий средство проверки правил, не проверяет следующий MISRA C:2004, кодирующий правила. Эти правила не могут быть осуществлены, потому что они выходят за рамки программного обеспечения Polyspace. Они могут коснуться документации, динамических аспектов или функциональных аспектов правил MISRA. Столбец Дополнительной информации описывает причину, каждое правило не проверяется.
Правило | Описание | Дополнительная информация |
---|---|---|
1.2 (Необходимый) | Никакая уверенность не должна быть помещена в неопределенное или незаданное поведение | Не статически поддающийся проверке, если динамические свойства данных не учтен |
1.3 (Необходимый) | Несколько компиляторов и/или языков должны только использоваться, если будет общий заданный интерфейсный стандарт для объектного кода, которому язык/компиляторы/ассемблеры соответствуют. | Это - метод правила процесса. |
1.4 (Необходимый) | Компилятор/компоновщик/Идентификаторы (внутренний и внешний) не должен использовать значение больше чем 31 символа. Кроме того, компилятор/компоновщик должен проверяться, чтобы гарантировать, что 31 символьное значение и чувствительность к регистру поддерживаются для внешних идентификаторов. | Чтобы наблюдать это правило, проверяйте свою документацию компилятора. |
1.5 (Консультация) | Реализации с плавающей точкой должны выполнить заданный стандарт с плавающей точкой. | Чтобы наблюдать это правило, проверяйте свою документацию компилятора. |
Правило | Описание | Дополнительная информация |
---|---|---|
3.1 (Необходимый) | Все использование заданного реализацией поведения должно быть зарегистрировано. | Чтобы наблюдать это правило, проверяйте свою документацию компилятора. Выявление ошибок основано на неопределенном поведении, согласно выбору, сделанному для реализации - заданные конструкции. |
3.2 (Необходимый) | Набор символов и соответствующее кодирование должны быть зарегистрированы. | Чтобы наблюдать это правило, проверяйте свою документацию компилятора. |
3.3 (Консультация) | Реализация целочисленного деления в выбранном компиляторе должна быть определена, зарегистрирована и учтена. | Чтобы наблюдать это правило, проверяйте свою документацию компилятора. |
3.5 (Необходимый) | Заданное реализацией поведение и упаковка битовых полей должны быть зарегистрированы, будучи положенным. | Чтобы наблюдать это правило, проверяйте свою документацию компилятора. |
3.6 (Необходимый) | Все библиотеки, пользовавшиеся в производственном коде, должны быть записаны, чтобы выполнить условия этого документа и должны подвергнуться соответствующей валидации. | Чтобы наблюдать это правило, проверяйте свою документацию компилятора. |
Правило | Описание | Дополнительная информация |
---|---|---|
18.3 (Необходимый) | Область памяти не должна быть снова использована в несвязанных целях. | "целью" является проблема функционального проекта. |