Для более точного анализа с помощью Polyspace ® можно задать внешние ограничения для:
Глобальные переменные.
Пользовательские функции.
Ограничения на определяемые пользователем функции не применяются к анализу Bug Finder.
Упорные функции.
Ограничения на упорные функции не применяются к анализу Bug Finder.
Дополнительные сведения см. в разделе Указание внешних ограничений. Частичный список ограничений см. в разделе Ограничения спецификации ограничений.
В интерфейсе пользователя настольных продуктов Polyspace можно указать ограничения в окне Спецификация ограничений (Constraint Specification). Ограничения сохраняются в XML-файле, который можно повторно использовать для других проектов.
![]()

![]()
В этой таблице описаны различные столбцы в окне Спецификация ограничений (Constraint Specification). При непосредственном редактировании XML-файла ограничения для указания ограничения (например, в продуктах Polyspace Server) в этой таблице также отображается соответствие между столбцами в интерфейсе пользователя и записями в XML-файле. Выделенная полужирным шрифтом запись XML появляется в соответствующем столбце окна Спецификация ограничения (Constraint Specification).
| Колонка | Настройки | Запись XML-файла |
|---|---|---|
| Имя | Отображает список переменных и функций в проекте, для которых можно задать диапазоны данных. В этом столбце отображаются три расширяемых пункта меню:
|
<function name = "funcName" ...>
<scalar name = "arg1" ...>
<pointer name = "arg2" ...> |
| Файл | Отображает имя исходного файла, содержащего переменную или функцию. |
<file name = "C:\Project1\Sources\file.c" ...> |
| Признаки | Отображает информацию о переменной или функции. Например, отображаются статические переменные |
<function name="funcName" attributes="unused" ...> |
| Тип данных | Отображение типа переменной. |
<scalar name="arg1" complete_type="int32" ...> |
| Вызываемый основной генератор | Применимо только для пользовательских функций. Указывает, вызывает ли главный генератор функцию:
|
<function name="funcName" main_generator_called="MAIN_GENERATOR" ...> |
| Режим инициализации | Указывает, как программа назначает диапазон переменной:
Поддержка только пользовательских функций Поддержка только функций заглушки Для проверок C поддержка глобальных указателей
|
<scalar name="arg1" init_mode="INIT" ...> |
| Диапазон инициализации | Указывает минимальное и максимальное значения переменной. Можно использовать ключевые слова Можно также использовать шестнадцатеричные значения. Например: Для Для enum week{ sunday, monday=0, tuesday, wednesday, thursday, friday, saturday}; |
<scalar name="arg1" init_range="-1..0"...> |
| Инициализация указателя | Применимо только к указателям. Включено только при указании режима Init: Указывает, должен ли указатель иметь значение NULL:
Примечание Неприменимо для проектов C++. См. раздел Ограничения спецификации ограничений. |
<pointer name="arg1" initialize_pointer="Not NULL"...> |
| Init Allocated | Применимо только к указателям. Включено только при указании режима Init: Указывает способ назначения остроконечного объекта:
Кроме того, для аргументов указателя на упорные функции доступны две другие опции:
Для упорных функций - опции Примечание Неприменимо для проектов C++. См. раздел Ограничения спецификации ограничений. |
<pointer name="arg1" init_pointed="MAIN_GENERATOR"...> |
| # Присвоенные объекты | Применимо только к указателям. Указывает, на какое количество объектов указывает указатель (указанный объект рассматривается как массив). Параметр Init Allocated указывает, сколько выделенных объектов действительно инициализировано. Например, рассмотрим этот код: void func(int *ptr) {
assert(ptr[0]==1);
assert(ptr[1]==1);
}
оба утверждения зеленые. Однако если заданы следующие ограничения:
второе утверждение оранжевое. Только первый объект, который Примечание Неприменимо для проектов C++. См. раздел Ограничения спецификации ограничений. |
<pointer name="arg1" number_allocated="10"...> |
| Глобальное утверждение | Указывает, следует ли выполнять проверку утверждения переменной при глобальной инициализации и после каждого назначения. |
<scalar name="glob" global_assert="YES"...> |
| Глобальный диапазон подтверждения | Указывает минимальное и максимальное значения для диапазона, который требуется проверить. |
<scalar name="glob" assert_range="0..200"...> |
| Комментарий | Примечания, вводимые, например, для обоснования значений DRS. |
<scalar name="glob" comment="Speed Range"...> |
Нельзя задать следующие ограничения:
Нельзя ограничить указатели C++:
В C++ нельзя ограничить аргументы указателей функций. Функции, имеющие только аргументы указателя, не отображаются в интерфейсе спецификации ограничений.
Из-за полиморфизма указатель C++ может указывать на объекты нескольких классов в иерархии классов и может требовать вызова различных конструкторов. Предварительный анализ для спецификации ограничения не может определить, какой тип объекта следует ограничить или какой конструктор вызвать.
Зависимости не могут быть уравнениями:
Нельзя указать ограничение, которое связывает возвращаемое значение функции с ее входами. Для зависимостей можно задать только постоянный диапазон.
Несколько диапазонов невозможно:
Нельзя задать несколько диапазонов для ограничения. Например, нельзя указать, что аргумент функции имеет значение -1 или значение в диапазоне [1100]. Вместо этого укажите диапазон [-1100] или выполните два отдельных анализа, один раз со значением -1 и один раз с диапазоном [1100].