SQO-Subset1
В Polyspace® Code Prover™, следующий набор правил кодирования обычно уменьшает количество недоказанных результатов.
Номер правила | Описание |
---|---|
5.2 | Идентификаторы во внутренних возможностях не должны использовать то же имя, что и идентификаторы во внешних возможностях, и поэтому скрывать этот идентификатор. |
8.11 | Спецификатор статического класса памяти должен использоваться в определениях и декларациях объектов и функций, имеющих внутренние редактирования. |
8.12 | Когда массив объявлен с внешним редактированием, его размер должен быть указан явным или неявным образом путем инициализации. |
11.2 | Преобразование не должно выполняться между указателем на объект и любым типом, отличным от интегрального типа, другим указателем на тип объекта или указателем на удаление. |
11.3 | Приведение не должно выполняться между типом указателя и интегральным типом. |
12.12 | Базовые битовые представления значений с плавающей точкой не должны использоваться. |
14.7 | Функция должна иметь одну точку выхода в конце функции. |
16.1 | Функции не должны определяться переменным числом аргументов. |
16.2 | Функции не должны вызывать себя, прямо или косвенно. |
17.3 | >, > =, <, < = не применяется к типам указателей, кроме тех случаев, когда они указывают на один и тот же массив. |
17.6 | Адрес объекта с автоматическим хранением не должен быть присвоен объекту, который может сохраняться после прекращения существования объекта. |
18.4 | Объединения не должны использоваться. |
Для получения дополнительной информации об этих правилах смотрите MISRA AC AGC Guidelines for the Application of MISRA-C:2004 in the Context of Automatic Code Generation.
SQO-Subset2
Хорошие методы проекта обычно приводят к меньшей сложности кода, что может уменьшить количество недоказанных результатов в Polyspace Code Prover. Следующий набор правил кодирования обеспечивает применение передовых методов проекта. The SQO-subset2
опция проверяет правила в SQO-subset1
и некоторые дополнительные правила.
Номер правила | Описание |
---|---|
5.2 | Идентификаторы во внутренних возможностях не должны использовать то же имя, что и идентификаторы во внешних возможностях, и поэтому скрывать этот идентификатор. |
6.3 | вместо основных типов следует использовать шрифты, указывающие на размер и сигнальность |
8.7 | Объекты должны быть определены в возможности, если они доступны только из одной функции |
8.11 | Спецификатор статического класса памяти должен использоваться в определениях и декларациях объектов и функций, имеющих внутренние редактирования. |
8.12 | Когда массив объявлен с внешним редактированием, его размер должен быть указан явным или неявным образом путем инициализации. |
9.3 | В списке перечислителей конструкция = не должна использоваться для явной инициализации представителей, отличных от первой, если только все элементы не инициализированы явно |
11.1 | Преобразование не должно выполняться между указателем на функцию и любым типом, отличным от интегрального типа |
11.2 | Преобразование не должно выполняться между указателем на объект и любым типом, отличным от интегрального типа, другим указателем на тип объекта или указателем на удаление. |
11.3 | Приведение не должно выполняться между типом указателя и интегральным типом. |
11.5 | Литье типов от любого типа к или от указателей не должно использоваться |
12.2 | Значение выражения должно быть тем же самым в любом порядке оценки, который разрешает стандарт |
12.9 | Оператор унарного минуса не применяется к выражению, базовый тип которого не подписан |
12.10 | Оператор запятыми не должен использоваться |
12.12 | Базовые битовые представления значений с плавающей точкой не должны использоваться. |
14.7 | Функция должна иметь одну точку выхода в конце функции. |
16.1 | Функции не должны определяться переменным числом аргументов. |
16.2 | Функции не должны вызывать себя, прямо или косвенно. |
16.3 | Идентификаторы должны быть даны для всех параметров в объявлении прототипа функции |
16.8 | Все выходные пути из функции с непустым типом возврата должны иметь явный оператор возврата с выражением |
16.9 | Идентификатор функции должен использоваться только с предыдущим &, или со списком параметров в круглых скобках, который может быть пустым |
17.3 | >, > =, <, < = не применяется к типам указателей, кроме тех случаев, когда они указывают на один и тот же массив. |
17.6 | Адрес объекта с автоматическим хранением не должен быть присвоен объекту, который может сохраняться после прекращения существования объекта. |
18.4 | Объединения не должны использоваться. |
19.9 | Аргументы в функциональный макрос не должны содержать лексемы, которые выглядят как директивы предварительной обработки |
19.10 | В определении функционального макроса каждый образец параметра должен быть заключен в круглые скобки, если он не используется в качестве операнда # или # |
19.11 | Все идентификаторы макросов в директивах препроцессора должны быть определены перед использованием, кроме директивы # ifdef и # ifndef предпроцессора и оператора defined () |
19.12 | Должно быть не более одного вхождения операторов предпроцессора # или # # в одном определении макроса. |
20.3 | Проверяется валидность значений, переданных в библиотечные функции. |
Примечание
Программное обеспечение Polyspace не проверяет MISRA® правило 20.3 непосредственно.
Однако можно проверить это правило, написав ручные заглушки, которые проверяют валидность значений. Например, следующий код проверяет валидность входа, больше 1:
int my_system_library_call(int in) {assert (in>1); if random \ return -1 else return 0; }
Для получения дополнительной информации об этих правилах смотрите MISRA AC AGC Guidelines for the Application of MISRA-C:2004 in the Context of Automatic Code Generation.
Check MISRA AC AGC (-misra-ac-agc)