Проверьте приложение на C без main Функция

Polyspace® для верификации требуется, чтобы ваш код имел main функция. Можно выполнить одно из следующих действий:

  • Предоставьте main функция в вашем коде.

  • Задайте, что Polyspace должен сгенерировать main.

Сгенерируйте main Функция

Перед верификацией задайте один из следующих опций. В пользовательском интерфейсе десктопных продуктов Polyspace опции появляются под узлом Code Prover Verification.

ОпцияОписание
Verify whole application

Верификация останавливается, если программное обеспечение не обнаруживает main.

Verify module or library (-main-generator)

Перед верификацией Polyspace проверяет, содержит ли ваш код main функция.

Если a main функция существует, программное обеспечение использует эту main. В противном случае программное обеспечение генерирует main используя заданные опции:

Запись вручную main Функция

Во время автоматического main генерация, программа делает определенные допущения относительно последовательности вызова функции или поведения глобальных переменных. Например, автоматически сгенерированный по умолчанию main моделирует следующее поведение:

  • Функции, которые вы задаете используя опцию Functions to call (-main-generator-calls) может быть вызван в произвольном порядке.

  • В начале каждого тела функции глобальные переменные могут иметь полную область значений значений, разрешенных их типом.

Чтобы предоставить более точную модель последовательности вызовов, можно вручную написать main функции для целей верификации. Вы можете добавить эту main функция в отдельном файле к вашему проекту. В некоторых случаях предоставление точной последовательности вызовов может уменьшить количество оранжевых проверок. Для примера в следующем коде Polyspace принимает, что f и g можно вызвать в любом порядке. Поэтому это создает оранжевое переполнение для случая, когда f вызывается перед g. Если вы знаете это f вызывается после g, можно написать main функция, чтобы смоделировать эту последовательность.

static char x;
static int y;

void f(void)
{
    y = 300;
}

void g(void)
{
    x = y; 
}

 Пример 1: main Вызывает одну функцию перед другой

 Пример 2: main Вызывает одну функцию 10 раз перед другой

Похожие темы