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 | Объединения не должны использоваться. |
Для получения дополнительной информации об этих правилах, см. Инструкции по AGC AC MISRA для Приложения MISRA-C:2004 в Контексте Автоматической Генерации кода.
SQO-Subset2
Хорошие методы проекта обычно приводят к меньшему количеству сложности кода, которая может сократить количество бездоказательных результатов в Polyspace Code Prover. Следующий набор кодирования правил осуществляет хорошие методы проекта. 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 директив препроцессору и заданного () оператор |
19.12 | Должно быть самое большее одно вхождение # или ## операторов препроцессора в одном макроопределении. |
20.3 | Валидность значений, переданных библиотечным функциям, должна проверяться. |
Программное обеспечение Polyspace не проверяет правило 20.3 MISRA® непосредственно.
Однако можно проверять это правило путем записи ручных тупиков, которые проверяют валидность значений. Например, следующий код проверяет валидность входа, бывшего больше 1:
int my_system_library_call(int in) {assert (in>1); if random \ return -1 else return 0; }
Для получения дополнительной информации об этих правилах, см. Инструкции по AGC AC MISRA для Приложения MISRA-C:2004 в Контексте Автоматической Генерации кода.
Check MISRA AC AGC (-misra-ac-agc)