Верификация Polyspace® может иногда останавливаться в компиляции или соединении фазы из-за следующих причин:
Компилятор Polyspace строго следует за C или Стандартом C++ (в зависимости от вашего выбора компилятора). См. Стандарт Языка C/C++, Используемый в Анализе Polyspace. Если ваш компилятор позволяет отклонение от Стандарта, компиляция Polyspace с помощью опций по умолчанию не может эмулировать компилятор.
Ваш компилятор объявляет стандартные библиотечные функции с аргументом, или возвратите типы, отличающиеся от стандартных типов. Если вы также не предоставляете функциональное определение для эффективной верификации, Polyspace использует свои собственные определения стандартных библиотечных функций, которые имеют обычный прототип. Несоответствие в типах вызывает соединяющуюся ошибку.
Можно легко работать вокруг компиляции и стандартных ошибок библиотечной функции. Чтобы работать вокруг ошибок, вы обычно задаете определенные опции анализа. В некоторых случаях вам придется добавить несколько линий на ваш код. Например:
Чтобы эмулировать ваше поведение компилятора более тесно, вы задаете Target & Compiler options. Если вы все еще сталкиваетесь с ошибками компиляции, вам придется удалить или заменить определенные нераспознанные ключевые слова с помощью опции Preprocessor definitions (-D). Однако опция позволяет только простую замену строки с другой строкой. Для более комплексных замен вам придется добавить #define операторы к вашему коду.
Чтобы избежать ошибок от блокирования стандартных библиотечных функций, вы можете иметь к #define определенные специфичные для Polyspace макросы так, чтобы Polyspace не использовал свое собственное определение стандартных библиотечных функций.
Вместо того, чтобы добавить эти модификации в ваш оригинальный код, создайте один polyspace.h файл, который содержит все модификации. Используйте опцию Include (-include) обеспечивать включение polyspace.h файл во всех исходных файлах при верификации.
Преимущества этого подхода включают:
Выявление ошибок намного быстрее, поскольку оно будет обнаружено во время компиляции, а не в ссылке или последующих фазах.
Не будет никакой потребности изменить файлы первоисточника.
Файл автоматически включен как самый первый файл в исходном .c файлы.
Файл является допускающим повторное использование для других проектов, разработанных под той же средой.
Это - пример файла, который может использоваться с опцией Include (-include).
// The file may include (say) a standard include file implicitly
// included by the cross compiler
#include <stdlib.h>
#include "another_file.h"
// Workarounds for compilation errors
#define far
#define at(x)
// Workarounds for errors due to redefining standard library functions
#define POLYSPACE_NO_STANDARD_STUBS // use this flag to prevent the
//automatic stubbing of std functions
#define __polyspace_no_sscanf
#define __polyspace_no_fgetc
void sscanf(int, char, char, char, char, char);
void fgetc(void);